2016-04-06 2 views
0

У меня есть выход к 3 TextFields в моем коде следующим образом:UITextField becomeFirstReponder не работает и возвращение ложных

@IBOutlet var oldPasswordTextField: UITextField! { didSet { oldPasswordTextField.delegate = self } } 
@IBOutlet var newPasswordTextField: UITextField! { didSet { newPasswordTextField.delegate = self } } 
@IBOutlet var confirmPasswordTextField: UITextField! { didSet { confirmPasswordTextField.delegate = self } } 

В моем textFieldShouldReturn методе делегата, я хочу сделать следующее текстовое поле в качестве первого ответчика по щелчку возврата следующим образом:

func textFieldShouldReturn(textField: UITextField) -> Bool { //delegate method 
    textField.resignFirstResponder() 

    if textField == oldPasswordTextField 
    { 
     newPasswordTextField.becomeFirstResponder() 
    } 
    else if textField == newPasswordTextField 
    { 
     confirmPasswordTextField.becomeFirstResponder() 
    } 
    else 
    { 
     saveButtonTapped() 
    } 
    return true 
} 

Но он не работал. Поэтому я попытался проверить, что происходит не так. Так что я попытался это:

func textFieldShouldReturn(textField: UITextField) -> Bool { //delegate method 
    if textField.canResignFirstResponder() 
    { 
     print("textField can resign first responder") 
     if textField.resignFirstResponder() == true 
     { 
      print("textField resigned first responder") 
     } 
     else 
     { 
      print("textField didnt resign first responder") 
     } 
    } 
    else 
    { 
     print("textField cant resign first responder") 
    } 

    if textField == oldPasswordTextField 
    { 
     if newPasswordTextField.canBecomeFirstResponder() == true 
     { 
      if newPasswordTextField.becomeFirstResponder() == true 
      { 
       print("newPassword field has become first responder") 
      } 
      else 
      { 
       print("newPassword field cannot become first responder") 
      } 
     } 

    } 
    else if textField == newPasswordTextField 
    { 
     confirmPasswordTextField.becomeFirstResponder() 
    } 
    else 
    { 
     saveButtonTapped() 
    } 
    return true 
} 

И сверхурочные я получаю «TextField не могу уйти в отставку первый ответчик» «поле Новый_пароль не может стать первым ответчиком» на моей консоли. Я не знаю, что здесь происходит. Почему метод canResignFirstResponder() и методы getsFirstResponder() возвращают false? Любая помощь?

+0

ничто не кажется неправильным и тот же код работает нормально для меня. – Mathews

+0

Получил это. Ошибка в моем коде заключалась в том, что мой метод textFieldShouldEndEditing возвращал false, поэтому метод resignFirstResponder возвращал false, и он не работал. Поэтому я сделал это верным, и он отлично работает. :) – Priyanka

ответ

0

Попробуйте использовать теги в своих текстовых полях. Это работает для меня:

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    NSInteger nextTag = textField.tag + 1; 
    // Try to find next responder 
    UIResponder* nextResponder = [textField.superview viewWithTag:nextTag]; 
    if (nextResponder) { 
     // Found next responder, so set it. 
     [nextResponder becomeFirstResponder]; 
    } else { 
     // Not found, so remove keyboard. 
     [textField resignFirstResponder]; 
    } 
    return NO; // We do not want UITextField to insert line-breaks. 
} 

К сожалению, я не видел, что это не Objective-C, в стрижа было бы:

func textFieldShouldReturn(textField: UITextField!) -> Bool { 
    let nextTag:Int = textField.tag + 1 
    // Try to find next responder 
    if let nextResponder: UIResponder! = textField.superview!.viewWithTag(nextTag){ 
     nextResponder.becomeFirstResponder() 
    } else { 
     // Not found, so remove keyboard. 
     textField.resignFirstResponder() 
    } 
    return false; // We do not want UITextField to insert line-breaks. 
} 

Я нашел решение здесь: Switching between Text fields on pressing return key in Swift

+0

не работает :(nextResponder.becomeFirstResponder() является ложным – Priyanka

0

Понял. Вышеприведенный код в порядке. Ошибка в моем коде заключалась в том, что мой метод textFieldShouldEndEditing возвращал false, поэтому метод resignFirstResponder возвращал false, и он не работал. Таким образом, я сделал метод textFieldShouldEndEditing верным, и он отлично работает. :)

func textFieldShouldEndEditing(textField: UITextField) -> Bool { //delegate method 
    return true 
}