3

UITableView2 つのカスタム セルがあり、それぞれにサブビューがあり、その中にサブビューがありますUITextFieldUIButtonの上に を追加しようとしましたが、UITableViewそれresignFirstResponderは他の場所をタップできないことを意味します-UITextFieldsテキストを入力するためにさえも。

これら 2 つの外側をタップするUITextFieldsと、resignFirstResponder を呼び出すことができるので、ユーザーは他のセルに戻ることができます。

ありがとう

4

3 に答える 3

2

それを行う簡単な方法は、UITableView をサブクラス化し、タッチ メソッドを実装することです (後でそれらをスーパーに渡すことを忘れないでください!)。そこから、開始されたタッチでタッチを検査し、それが UITextField 内にあるタッチであるかどうかを判断できます (UIView の hitTest: メソッドを使用)。hitTest が UITextField を返さない場合は、コントローラーでメソッドを呼び出して、ファーストレスポンダーを辞任させることができます。これがあなたを正しい方向に向けてくれることを願っています!

于 2009-12-19T12:11:28.490 に答える
1

私は同様の質問をし、私が投稿した答えを自分で見つけました。基本的に、カスタム UITableViewCell で hitTest:withEvent: をオーバーライドできます。これにより、セルまたはテーブル ビュー内の他のセルでタッチが発生したことを検出できます。元の hitTest: の機能を複製する hitTest: メソッドの例を提供しました。必要なものを追加するだけです。私が行ったように、hitTest 関数内に rejectFirstResponder を追加するか、さらにカスタマイズすることができます。

于 2010-03-16T18:17:21.190 に答える
-2

フィールドの外側をタップして最初の応答者を辞任しようとする代わりに、キーボードが表示されたときに -setFrame を使用してテーブルビューのサイズを変更し、キーボードの上の可視領域に収まるようにします。次に、ビューを他のセルにスクロールできます。次のようにイベントに登録することで、キーボードが表示されていることを通知できます。

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWillShow:)
                                             name:UIKeyboardWillShowNotification
                                           object:nil];

次に、keyboardWillShow を実装します。

- (void)keyboardWillShow:(NSNotification*)notification;
{
    [tableView setFrame:CGRectMake(0.0f, 0.0f, 320.0f, 200.0f)];
}

よろしくお願いします。

于 2009-10-20T05:06:40.903 に答える