2

UITableViewController が関連付けられた UITableView があります。ただし、テーブルを変更して、テキストフィールドのサブビューを含むビューも作成しました。

いつものように、ユーザーが「完了」を押したとき (簡単)、およびテキストフィールド以外の画面上の他の場所に触れたとき (ハード、スタック!) にキーボードが消えるようにしたいと考えています。

これを実現する通常の方法は、クラスを UIControl に変更してアクションを処理できるようにすることですが、UITableView/UITableViewController の組み合わせではこれを行うことができません。

どうすればこの問題を解決できますか?

4

4 に答える 4

4

通常の方法では、カスタム UIButton (uitextfield が編集を開始したときにのみ表示される) をキーボード ビューの背後に配置し、ユーザーが画面をクリックすると実際にそのボタンをクリックし、関連するセレクターがファーストレスポンダーを辞任できるようにします。

-(void) closeKeyboard:(UIButton *) b {
    [self.view endEditing:YES]; //assuming self is your top view controller.
    [b setHidden:YES];  
}

endEditing を使用する方が優れています。これは、すべてのサブビューをループして現在のファーストレスポンダーを探すためです。

于 2012-08-04T15:43:41.707 に答える
2

ARC を有効にして割り当てブレークを使用する

以下をviewControllerに追加するだけです

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    //where text field is a @property (nonatomic,retain) IBOutlet to your textfield
    [textField resignFirstResponder]; 
}
于 2013-06-08T17:21:55.743 に答える
0

行がタップされると、didSelectRowAtIndexPathが呼び出されます。行内にある textField がタップされると、textfield デリゲートが呼び出されます。

したがって、完了ボタン メソッドにdidSelectRowAtIndexPath加えて、テキスト フィールドがファーストレスポンダーであることのチェックを追加し、辞任するように依頼します。選択された indexPath がテキストフィールドの行ではないと仮定します。

于 2012-08-04T16:17:33.943 に答える