2

我有三个 UITableViewCell 子类。我在视图控制器的表视图中显示这些。我在视图控制器中为 tableView:willSelectRowAtIndexPath: 返回 nil,因为我希望 UITextFields 在我的两个 UITableViewCell 子类中获得焦点并成为第一响应者。

对于第三个 UITableViewCell 子类,我有一个自定义 UIView 子类,其中包含一个 UIWebView。目前在 UIWebView 中加载的 html 内容中的 div 是 1 行高。我之前将 div 高度设置为 100%,但发现滚动开始起作用。如果我点击 div 键盘就会出现。但是,如果用户点击此自定义 UITableViewCell 中的任何其他位置,则不会选择 UIWebView div,并且不会出现键盘。

如何让我的自定义 UITableViewCell 或自定义 UIView 子类成为第一响应者?还是我以错误的方式解决这个问题?

4

1 回答 1

1

我相信你会以错误的方式解决这个问题。返回 nil fortableView:willSelectRowAtIndexPath:不会真正帮助您在这里的事业。

相反,您有几个选择。首先,您可以在表格单元格中的文本字段后面创建一个 UIButton,填充整个视图,然后响应对其的触摸并告诉文本字段变为活动状态。像这样:

在 UITableViewCell 子类中连接按钮:

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

触摸时将焦点设置在文本字段上:

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

另一种选择,也是我不太喜欢的一种,是在委托方法中处理单元格的选择,并告诉单元格的文本字段变为活动状态。像这样:

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

当然,您需要在其中添加一个textField属性MyCustomCellSubclass才能执行此操作。

希望这可以帮助!

于 2012-06-19T01:36:52.847 回答