使自定义UIView成为自定义UITableViewCell的第一响应者

时间:2012-06-18 20:28:33

标签: objective-c ios uiview uitableview

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

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

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

1 个答案:

答案 0 :(得分:1)

我相信你会以错误的方式解决这个问题。对tableView:willSelectRowAtIndexPath:返回nil并不会对你的事业有所帮助。

相反,你有几个选择。首先,您可以创建一个位于表格单元格中文本字段后面的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属性才能执行此操作。

希望这有帮助!