我有三个UITableViewCell子类。我在视图控制器的表视图中显示它们。我在视图控制器中为tableView返回nil:willSelectRowAtIndexPath:因为我希望UITextFields在我的两个UITableViewCell子类中获得焦点并成为第一响应者。
对于第三个UITableViewCell子类,我有一个包含UIWebView的自定义UIView子类。目前,在UIWebView中加载的html内容中的div是一行高。我之前将div高度设为100%,但发现滚动开始起作用。如果我点击div键盘就会出现。但是,如果用户点击此自定义UITableViewCell中的任何其他位置,则不会选择UIWebView div并且键盘不会出现。
如何让我的自定义UITableViewCell或自定义UIView子类成为第一个响应者?或者我是以错误的方式解决这个问题?
答案 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
属性才能执行此操作。
希望这有帮助!