2012-04-28 3 views
59

Я пытаюсь показать изменения, внесенные в UITextField на отдельном UILabel. Есть ли способ захватить полный текст UITextField после каждого символа, который вводит пользователь? В настоящее время я использую этот метод, но он не фиксирует последний символ, введенный пользователем.iPhone, как получить текст 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 после каждого введенного символа?

Спасибо!

+0

Отъезд: http://stackoverflow.com/questions/388237/getting-the-value-of-a-uitextfield-as-keystrokes-are-entered – hanumanDev

ответ

134
  1. Сначала добавьте UITextField и UILabel раскадровку/СИБ
  2. Теперь назначьте IBOutlet для UILabel (Здесь я использовал MyLabel)
  3. Присвоить UITextFieldDelegate для владельца файла, а также реализовать один и тот же делегат в .h файл
  4. Используйте следующие строки кода:

    - (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]; 
    } 
    

Надеюсь, это поможет.

+0

Hummmmm Thats Очень хороший Thx. ..... :) –

+0

Это работает для меня .... –

+0

если я удалю символ один за другим. этот метод не вызывает –

67

Просто обрабатывать «Редактирование Changed» событие

[textField addTarget:self 
       action:@selector(editingChanged:) 
    forControlEvents:UIControlEventEditingChanged]; 

и селектор:

-(void) editingChanged:(id)sender { 
    // your code 
} 

Вы можете сделать это вручную или с помощью видеоредактора с помощью CTRL-Перетаскивание «Редактирование изменилось» Отправленные событие для вашего .h, создав для вас метод editingChanged.

+3

Ваше решение идеально! спасибо – SpaceDog

+10

Это на самом деле лучшее решение, как принято. Благодаря!. Принятый ответ не будет полностью очищать текст ярлыка, когда вы удаляете последний символ из текстового поля. – Menno

+0

это должно быть выбрано как ответ – Lucas

5

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

} 

Надеется, что это поможет вам быстрые пионерам

3

Swift с addTarget Swift 2.0+

titleTextField.addTarget(self, action: #selector(textFieldTyping), forControlEvents: .EditingChanged) 

И реализовать selector

func textFieldTyping(textField:UITextField) 
{ 
    //Typing 
} 
1

В 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) 
     } 
    } 
0

Swift 3.0+: Это работает очень хорошо для меня.

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 
    self.yourLabel.text = "\(textField.text ?? "")\(string)" 
    return true 
} 
0
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! 
       } 


      } 
    } 
Смежные вопросы