iPhone Как получить текст UITextField во время набора текста?
Я пытаюсь показать изменения, внесенные в UITextField
на отдельной UILabel
. Есть ли способ захватить полный текст UITextField
после каждого символа пользователь в? В настоящее время я использую этот метод, но он не захватит последний символ, введенный пользователем.
Я знаю, что UITextView
имеет метод "didChange", но я не смог найти этот метод для UITextField
.
//does not capture the last character
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
[self updateTextLabelsWithText: textField.text];
return YES;
}
как я могу взять текст из UITextField после каждого символа вошел?
спасибо!
7 ответов:
- сначала добавить один
UITextField
иUILabel
в раскадровку / перо- теперь назначить
IBOutlet
наUILabel
(здесь я использовал myLabel)- присвоить
UITextFieldDelegate
для владельца файла, также реализовать тот же делегат В.файл Hиспользуйте следующие строки кода:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string]; [self updateTextLabelsWithText: newString]; return YES; } -(void)updateTextLabelsWithText:(NSString *)string { [myLabel setText:string]; }
надеюсь, что это помогает.
просто обработайте событие "редактирование изменено"
[textField addTarget:self action:@selector(editingChanged:) forControlEvents:UIControlEventEditingChanged];
и селектор:
-(void) editingChanged:(id)sender { // your code }
вы можете сделать это вручную или с помощью раскадровки с помощью CTRL-перетаскивания события "редактирование изменено" отправлено на ваш .h, создание метода editingChanged для вас.
В Swift 2.0+
class CheckInViewController: UIViewController, UITextFieldDelegate { override func viewDidLoad() { super.viewDidLoad() yourTextField.delegate = self } func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool { var updatedTextString : NSString = textField.text as NSString updatedTextString = updatedTextString.stringByReplacingCharactersInRange(range, withString: string) self.methodYouWantToCallWithUpdatedString(updatedTextString) return true } }
надеюсь, что это поможет вам быстро пионеров
Swift с addTarget Swift 2.0+
titleTextField.addTarget(self, action: #selector(textFieldTyping), forControlEvents: .EditingChanged)
и реализовать
selector
func textFieldTyping(textField:UITextField) { //Typing }
В Swift 3.0:
некоторые из этих решений были одним символом позади, или для более ранних версий Swift и Obj-C. Вот что я использую для Swift 3.0
в классе я объявил заполнитель для хранения текста.
var tempName = ""
В ViewDidLoad я использовал:
nameField.addTarget(self, action: #selector(typingName), for: .editingChanged)
затем я сделал функцию с именем:
func typingName(textField:UITextField){ if let typedText = textField.text { tempName = typedText print(tempName) } }
Swift 3.0+: это сработало очень хорошо для меня.
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { self.yourLabel.text = "\(textField.text ?? "")\(string)" return true }
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { if textField == yourTextFieldOutletName { if yourTextFieldOutletName.isEmpty == false { youtlabelname.text = yourTextFieldOutletName.text! } } return true } func textViewDidEndEditing(_ textView: UITextView) { if textField == yourTextFieldOutletName { if yourTextFieldOutletName.isEmpty == false { youtlabelname.text = yourTextFieldOutletName.text! } } }