一尘不染

Swift中的ChangeCharactersInRange应该如何工作?

swift

我正在使用 shouldChangeCharactersInRange 作为使用即时类型搜索的方式。

但是我有一个问题,在文本字段实际更新之前 应该 调用 shouldChangeCharactersInRange

在目标C中,我使用以下方法解决了这个问题:

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString * searchStr = [textField.text stringByReplacingCharactersInRange:range withString:string];

    return YES;
}

但是,我尝试用Swift编写此代码:

func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool {
    let txtAfterUpdate:NSString = self.projectSearchTxtFld.text as NSString
    txtAfterUpdate.stringByReplacingCharactersInRange(range, withString: string)

    self.callMyMethod(txtAfterUpdate)
    return true
}

在获得值之前,该方法仍会被调用?


阅读 217

收藏
2020-07-07

共1个答案

一尘不染

雨燕4,雨燕5

此方法不使用 NSString

// MARK: - UITextFieldDelegate

extension MyViewController: UITextFieldDelegate {
    func textField(_ textField: UITextField,
                   shouldChangeCharactersIn range: NSRange,
                   replacementString string: String) -> Bool {
        if let text = textField.text,
           let textRange = Range(range, in: text) {
           let updatedText = text.replacingCharacters(in: textRange,
                                                       with: string)
           myvalidator(text: updatedText)
        }
        return true
    }
}

注意。使用安全的文本字段时请小心。

2020-07-07