テキストフィールドの内容が変更されたときに関数が呼び出されるようにするにはどうすればよいですか?
Objective-C
[myTextField addTarget:self
action:@selector(textFieldDidChange:)
forControlEvents:UIControlEventEditingChanged];
Swift 4
myTextField.addTarget(self, action: #selector(textFieldDidChange(sender:)), for: .editingChanged)
@objc func textFieldDidChange(sender: UITextField) {...}
実際、UITextField
には値変更イベントはありません。UIControlEventEditingChanged
を使用してください
ShouldChangeChractersInRangeの動作を変更する問題を解決しました。 NOを返した場合、変更はiOSによって内部的に適用されません。代わりに、手動で変更し、変更後にアクションを実行する機会があります。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
//Replace the string manually in the textbox
textField.text = [textField.text stringByReplacingCharactersInRange:range withString:string];
//perform any logic here now that you are sure the textbox text has changed
[self didChangeTextInTextField:textField];
return NO; //this make iOS not to perform any action
}
Swift=これは便利です-
textField.addTarget(self, action: #selector(onTextChange), forControlEvents: UIControlEvents.EditingChanged)
これが私の解決策です。
Swift 4
textField.addTarget(self, action: #selector(self.textFieldDidChange(sender:)), for: .editingChanged)
@objc func textFieldDidChange(sender: UITextField){
print("textFieldDidChange is called")
}