2016-04-06 19 views
0
作業して返さない

次のように私は私のコードで3つのテキストフィールドに店舗を持っている: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 
} 

そして残業:だから私はこれを試してみました。私は何がここで間違っているのか分からない。 canResignFirstResponder()メソッドとbecomeFirstResponder()メソッドが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だっ表示されませんでした申し訳ありません:Switching between Text fields on pressing return key in Swift

+0

not working :(nextResponder.becomeFirstResponder()がfalseです。 – Priyanka

0

:私はここに解決策を見つけた

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

とった。上記のコードは問題ありません。私のコードの間違いは、私の 'textFieldShouldEndEditing'メソッドがfalseを返すということでした。なぜ私のresignFirstResponderメソッドがfalseを返していて、うまくいかなかったのです。 私は 'textFieldShouldEndEditing'メソッドをtrueに戻しました。 :)

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