web-dev-qa-db-ja.com

iOSアプリの「次へ」キーが次のテキストフィールドに移動しない

ユーザー名とパスワードのテキストボックスがある単純なシーン(IBのストーリーボードを使用)があります。パスワードテキストフィールドを開いているときにキーボードを閉じるように設定しましたが、パスワードテキストボックスにフォーカス(またはファーストレスポンダー)を切り替えるユーザー名で次へ(戻る)ボタンを使用することはできません。

次のように、[パスワード]テキストフィールドでキーボードを閉じています。

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
if (theTextField == self.textPassword) {
    [theTextField resignFirstResponder];
}
return YES;
}

私はそれがこれに似たものであることを知っていますが、それを特定することはできません。

42
BamBamBeano

デフォルトでは、リターンキーはテキストフィールドで特別なことはしません。最初のレスポンダーを明示的に変更する必要があります。

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
    if (theTextField == self.textPassword) {
        [theTextField resignFirstResponder];
    } else if (theTextField == self.textUsername) {
        [self.textPassword becomeFirstResponder];
    }
    return YES;
}
90
rob mayoff

ストーリーボードでフォームの動作を制御できるこのコードを使用します。

-(BOOL) textFieldShouldReturn:(UITextField *)textField{
    if(textField.returnKeyType==UIReturnKeyNext) {
        UIView *next = [[textField superview] viewWithTag:textField.tag+1];
        [next becomeFirstResponder];
    } else if (textField.returnKeyType==UIReturnKeyDone) {
        [textField resignFirstResponder];
    }
    return YES;
} 

必要なのは、各入力コントロールでNextまたはDoneに従ってtagおよびreturnkeyとして順序値を割り当てることです。

40
Esteve

Swift言語:

class MyClass: UIViewController, UITextFieldDelegate {

@IBOutlet weak var text1: UITextField!
@IBOutlet weak var text2: UITextField!
@IBOutlet weak var text3: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()

    text1.delegate = self
    text2.delegate = self
    text3.delegate = self


}

//....

func textFieldShouldReturn(textField: UITextField) -> Bool{
    if textField == self.text1 {
        self.text2.becomeFirstResponder()
    }else if textField == self.text2{
        self.text3.becomeFirstResponder()
    }else{
        self.text1.becomeFirstResponder()
    }
    return true
 }

 //...

}

:-)

11
N3tMaster

ヘッダーファイルにUITextFieldDelegateを追加する必要があります。次に、設定する必要があります

theTextField.delegate = self;

viewDidLoadメソッドで。その後、あなたは続けることができます

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
    if (theTextField == self.textPassword) {
        [theTextField resignFirstResponder];
    } else if (theTextField == self.textUsername) {
        [self.textPassword becomeFirstResponder];
    }
    return YES;
}
9
FTFT1234

この問題に対する多くの解決策が存在します。この質問に投稿された回答を参照してください: テキストフィールドをナビゲートする方法(次へ/完了ボタン)

詳細は IResponderクラスリファレンス をご覧ください。

5
sherbondy

ここにあなたが置くものがあります:

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
    if (theTextField == self.textPassword) {
        [theTextField resignFirstResponder];
    } else if (theTextField == self.usernameField) {
        [self.textPassword becomeFirstResponder];
    }
return YES;
}
3
bryanjclark

Swift 2.0 Rob Mayoffのバージョン

func textFieldShouldReturn(textField: UITextField) -> Bool {
    if textField == self.emailTextField {
        self.passwordTextField.becomeFirstResponder()
    }else{
        self.passwordTextField.resignFirstResponder()
    }
    return false
}
0
egeelabs

パスワードのテキストフィールドがフォーカスを取得し、すぐにフォーカスを失うという問題が発生しました。最後に、関数textFieldShouldReturn:でNOを返す方がよいことがわかりました。 YESを返すと、テキストフィールドはinsertText:呼び出しを取得します。その後、フォーカスが失われます。理由がわからない。

この問題に対して新しい質問を作成しました: UITextFieldはフォーカスを取得し、textFieldShouldReturn でYESを返すため、すぐにフォーカスを失います

誰かが理由を知っているなら、私に知らせてください。ありがとう。

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
    if (theTextField == self.textPassword) {
        [theTextField resignFirstResponder];
    } else if (theTextField == self.textUsername) {
        [self.textPassword becomeFirstResponder];
    }
    // we'd better return NO here
    return NO;
}
0
Harrison Xi

Text/string条件に従ってUIReturnKeyを動的に変更するUITextfieldのこのサブクラスを使用して、textFieldShouldReturn:(UITextField *)textFieldデリゲートで継続アクションを実行できます。

if (textField.returnKeyType == UIReturnKeyNext)

https://github.com/codeinteractiveapps/OBReturnKeyTextField
0
CodeInteractive