UITextField 解决由明文切换到密文后文本被清空和光标位置偏移问题

UITextField 解决由明文切换到密文后文本被清空和光标位置偏移问题

OC代码

// 1.避免明文切换成密文后被清空
- (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;
}



// 2.避免明文和密文切换后光标位置偏移
-(void)showAndHideMethod
{    
    self.passwordTextField.enabled = NO;    // 步骤1
    // 设置明文和密文代码...
    self.passwordTextField.enabled = YES;  // 步骤2
    [self.passwordTextField becomeFirstResponder]; // 步骤3
}

Swift代码

    // 1.避免明文切换成密文后被清空
    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
    }



// 2.toRange是一个String的分类
    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
    }



 // 3.避免明文和密文切换后光标位置偏移
@objc fileprivate func showAndHideMethod(btn: UIButton) {
        // 步骤1
        previousPwdTextField?.isEnabled = false;

        // 设置明文和密文代码...

        // 步骤2
        previousPwdTextField?.isEnabled = true;

        // 步骤3
        previousPwdTextField?.becomeFirstResponder()

        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值