1. ホーム
  2. ios

[解決済み] SwiftでshouldChangeCharactersInRangeはどのように動作しますか?

2023-05-23 02:05:45

質問

私は shouldChangeCharactersInRange をその場で型検索する方法として使っています。

しかし、私は問題を抱えています。 shouldChangeCharactersInRange が実際にテキストフィールドが更新される前に呼び出されることです。

Objective 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
}

値を取得する前に、やはりメソッドが呼び出されるのですか?

どのように解決するのですか?

Swift 4、Swift 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
    }
}

注意 セキュリティで保護されたテキストフィールドを使用する場合は注意が必要です。