密碼框有個常見的需求:用一個按鈕切換密碼的明文/密文顯示址遇。點一下顯示明文熄阻,再點一下顯示密文。
本來是個很簡單的需求倔约,因為 UITextField 有secureTextEntry
這個屬性可以用秃殉。但沒想到,簡單的一句代碼并不能解決問題:
- (IBAction)secureSwitchAction:(id)sender {
self.passwordTextField.secureTextEntry = !self.passwordInputTextField.secureTextEntry;
}
問題在于浸剩,在切換明文/密文的時候钾军,如果切換前后的字符串寬度不一樣,字符串末尾到光標(biāo)之間會出現(xiàn)一大段空白绢要。
切換之后吏恭,光標(biāo)前面有一段空白
官方文檔里也沒提這件事,估計又是官方實現(xiàn)的一個 bug 了重罪。好在只需要簡單加幾句代碼:
- (IBAction)secureSwitchAction:(id)sender {
self.passwordTextField.secureTextEntry = !self.passwordTextField.secureTextEntry;
NSString* text = self.passwordTextField.text;
self.passwordTextField.text = @" ";
self.passwordTextField.text = text;
}
就能解決問題了樱哼。
p.s. 我當(dāng)時還查到了這篇文章 只用一行代碼[self.passwordInputTextField becomeFirstResponder];
就能解決這個問題,只是副作用是會讓輸入焦點切換到密碼框剿配。如果不介意的話搅幅,用這個方法也可以。