在日常開發(fā)中寇漫,有時(shí)候我們需要對textfield的輸入內(nèi)容進(jìn)行隱藏toggle處理(特別是在登錄注冊模塊)稿械,這時(shí)候使用蘋果UITextField自帶的屬性secureTextEntry寄月,就可以很方便的做到這點(diǎn)乾翔,但是這個(gè)屬性實(shí)際的效果非常不盡人意告嘲,在改變這一屬性的時(shí)候赏殃,可能會(huì)發(fā)生以下情況:
- 字體font改變
- 文字大小改變
- 隱藏內(nèi)容的占位圓點(diǎn)大小改變
- 光標(biāo)位置不準(zhǔn)確
最佳解決方案:
BOOL wasFirstResponder;
if ((wasFirstResponder = [textField isFirstResponder])) {
[textField resignFirstResponder];
}
// 這里改變該屬性最好使用以下的方法,而不要使用類似[textField setSecureTextEntry:![textField isSecureTextEntry]]的方式场仲,因?yàn)闀?huì)改變占位文字的大小
textField.secureTextEntry = !textField.secureTextEntry;
if (wasFirstResponder) {
[textField becomeFirstResponder];
}
通過代碼可以看出和悦,出現(xiàn)上述四點(diǎn)問題的關(guān)鍵就在于textField是否處在第一響應(yīng)者上,當(dāng)處在第一響應(yīng)者的時(shí)候渠缕,如果通過代碼改變secureTextEntry的值鸽素,就會(huì)發(fā)生問題。
遺留bug:當(dāng)文本框處于secureTextEntry == Yes的狀態(tài)時(shí)亦鳞,第一次成為第一響應(yīng)者字體(占位圓點(diǎn))會(huì)變小馍忽。