2

3 つの UITableViewCell サブクラスがあります。これらをView Controllerのテーブルビューに表示しています。ビュー コントローラーで、tableView:willSelectRowAtIndexPath: に対して nil を返しました。これは、2 つの UITableViewCell サブクラスの UITextFields にフォーカスを取得してファーストレスポンダーにするためです。

3 番目の UITableViewCell サブクラスには、UIWebView を格納するカスタム UIView サブクラスがあります。現在、UIWebView にロードされた html コンテンツの div は 1 行の高さです。以前に div の高さを 100% にしましたが、スクロールが機能し始めたことがわかりました。div をタップすると、キーボードが表示されます。ただし、ユーザーがこのカスタム UITableViewCell 内の他の場所をタップすると、UIWebView div は選択されず、キーボードは表示されません。

カスタム UITableViewCell またはカスタム UIView サブクラスのいずれかをファーストレスポンダーにするにはどうすればよいですか? それとも、これについて間違った方法で行っていますか?

4

1 に答える 1

1

私はあなたがこれについて間違った方法で行っていると信じています。のためにnilを返すtableView:willSelectRowAtIndexPath:ことは、ここであなたの大義を本当に助けません。

代わりに、いくつかのオプションがあります。まず、ビュー全体を埋めるテーブルセルのテキストフィールドの後ろに配置するUIButtonを作成し、そのタッチに応答してテキストフィールドをアクティブにするように指示できます。そのようです:

UITableViewCellサブクラス内のボタンを配線します。

[self.button addTarget:self action:@selector(handleTouch) forControlEvents:UIControlEventTouchUpInside];

タッチしたときにテキストフィールドにフォーカスを設定します。

- (void)handleTouch
{
    [self.textField becomeFirstResponder];
}

もう1つのオプション、および私があまり好きではないオプションは、デリゲートメソッドでセルの選択を処理し、セルのテキストフィールドにアクティブになるように指示することです。そのようです:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    MyCustomCellSubclass *cell = [tableView cellForRowAtIndexPath:indexPath];
    [cell.textField becomeFirstResponder];
}

textFieldもちろん、これを行うには、プロパティを追加する必要がありますMyCustomCellSubclass

お役に立てれば!

于 2012-06-19T01:36:52.847 に答える