UITextField 解决由明文切换到密文后文本被清空和光标位置偏移问题
OC代码
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string];
if (textField == self.passwordTextField && textField.isSecureTextEntry) {
textField.text = toBeString;
return NO;
}
return YES;
}
-(void)showAndHideMethod
{
self.passwordTextField.enabled = NO;
self.passwordTextField.enabled = YES;
[self.passwordTextField becomeFirstResponder];
}
Swift代码
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
var toBeStr = textField.text
let rag = toBeStr?.toRange(range)
toBeStr = toBeStr?.replacingCharacters(in: rag!, with: string)
if textField.isSecureTextEntry {
textField.text = toBeStr
return false
}
return true
}
func toRange(_ range: NSRange) -> Range<String.Index>? {
guard let from16 = utf16.index(utf16.startIndex, offsetBy: range.location, limitedBy: utf16.endIndex) else { return nil }
guard let to16 = utf16.index(from16, offsetBy: range.length, limitedBy: utf16.endIndex) else { return nil }
guard let from = String.Index(from16, within: self) else { return nil }
guard let to = String.Index(to16, within: self) else { return nil }
return from ..< to
}
@objc fileprivate func showAndHideMethod(btn: UIButton) {
previousPwdTextField?.isEnabled = false;
previousPwdTextField?.isEnabled = true;
previousPwdTextField?.becomeFirstResponder()
}