1

キーボードから入力を受け取るカスタムクラスのインスタンスが複数あります。あなたは考えることができますUITextField(しかし、彼らはそうではありませんUITextField、彼らはそうですNSObject)。ただし、それらはすべてプロパティを持っていますUIControl *control

これらのオブジェクトはインスタンス化されて配列に入れられ(順序は重要です)、同じ順序で画面に配置されます。

シナリオ1:最初のオブジェクトのユーザータブ、それが最初のレスポンダーになります。ユーザーが(同じクラスの)別のオブジェクトをタップすると、それがファーストレスポンダーになります。問題ない。

シナリオ2:最初のオブジェクトのユーザータブ、それが最初のレスポンダーになります。TABユーザーがキーボード(iPadまたはiPhoneまたはワイヤレスキーボード)のボタンをタップすると、配列内の次のオブジェクトが次のレスポンダーになります。iOSはランダムに選択します[?または、いくつかのロジックが明確ではありません]私が望むのと同じ順序ではない別のオブジェクト。

問題:これらのオブジェクトはNSObjectsであるため、次のオブジェクトへの遷移をインターセプトするにはどうすればよいですか。タグを使用したり、ファーストレスポンダーを追跡したりしましたが、問題は、ユーザーがオブジェクトを順不同でタップした場合、それで問題ないということです。それを傍受したくないのです。キーボードの(またはまたは)ボタンをタップした場合にのみ、1つのオブジェクトから葯への遷移をインターセプトしたい。TABNextReturn

何か案が?ありがとう。

4

1 に答える 1

1

カスタムクラスを次のように設定できます

@interface testClassButtonSub : UIButton

@property (weak,nonatomic) IBOutlet UIButton *nextButton;

@end

次に、インターフェイス ビルダーを使用して、特定のアクションが実行されたときの次のレスポンダーを設定することもできます。(カスタムクラスのテキストフィールド内でユーザーがリターンキーを押した場合)

戻るには、ビューコントローラーを特定のテキストビューのデリゲートとして宣言する必要があります。

まず、viewcontroller ヘッダーを次のように設定します。

@interface RegisterViewController : UIViewController <UITextFieldDelegate>

次に、実装でデリゲートを設定します

// Set Delegates of the Text Fields
eMail.delegate = self;
userPassword.delegate = self;
userNickname.delegate = self;

このデリゲート メソッドを使用して、次のオブジェクトにジャンプします。

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{    
    // Jumping code here
    return NO;
}

ただし、あなたの場合、テキストフィールドはオブジェクト内にある必要があるため、そのオブジェクトをデリゲートにする必要があり、そのオブジェクトの実装ジャンプコードに

[thisObjectsTextfield becomeFirstResponder];
于 2012-11-21T02:08:38.637 に答える