我希望 UITableViewCell 中的 UItextField 仅在单元格触摸时成为第一响应者
Posted
技术标签:
【中文标题】我希望 UITableViewCell 中的 UItextField 仅在单元格触摸时成为第一响应者【英文标题】:I want a UItextField that is in UITableViewCell to become first responder only when the cell touched 【发布时间】:2011-07-07 16:47:09 【问题描述】:这就是我想要实现的目标:
我希望 UITableViewCell
中的 UITextField
仅在单元格被触摸时成为第一响应者。我希望文本字段只有在方法中设置为第一响应者时才成为第一响应者:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath`
知道如何实现这一目标吗?当直接触摸文本字段时,永远不会调用tableView:didSelectRowAtIndexPath:
。
提前致谢。
【问题讨论】:
【参考方案1】:我猜,你有一个自定义的 UITableViewCell。在那你可以有一个 UITextField 成员。对吧?
在自定义cell类中,重写方法,
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
:
如果选择 == YES,则将文本字段设为第一响应者。否则,请辞去第一响应者的职务。
【讨论】:
【参考方案2】:让一个对象作为 UITextField 的委托,实现textFieldShouldBeginEditing:
;如果尚未选择单元格,则返回 NO
。 (如果直接调用 becomeFirstResponder
绕过检查,您可能总是可以从此方法返回 NO。)
【讨论】:
【参考方案3】:为了在选择uitableviewcell
时让textField 成为first responder
,请将您的textField 用作您的property
,然后调用[self.textField1 becomeFirstResponder];
注意:您将需要与 UITableViewCells 数量一样多的属性,因为每个单元格都有一个 textField。
当一个文本字段被触摸时,编译器将不知道相应的行被选中。
为此,您需要使用tags
,例如textField.tag == 0
用于第一个文本字段,textField.tag ==1
用于第二个文本字段,依此类推。在textFieldDidBeginEditing
中,您应该检查标签,然后将该值与选定的相应行链接。
这些有意义吗? :)
【讨论】:
【参考方案4】:首先,您需要一个自定义表格单元格,即您自己的UITableViewCell
子类。在该实现中,您需要实现hitTest:
来确定触摸发生的位置。在该方法中,您可以确定触摸实际上是否在 UITextField 的矩形内,如果是,则使其成为第一响应者。这是我为项目编写的一些代码的示例:
在本例中,属性nickname
是自定义 UITableViewCell 内的 UITextField。
self.editing 的情况可能与您的申请相关,也可能不相关。这里的想法是向您展示通常如何使用 hitTest:。
【讨论】:
以上是关于我希望 UITableViewCell 中的 UItextField 仅在单元格触摸时成为第一响应者的主要内容,如果未能解决你的问题,请参考以下文章
UITableViewCell 中的 UITextField - UIButton
UITableViewCell 中的自定义 UISwitch
iOS - UI 测试在 UITableViewCell 中查找图像
在 UITableViewCell 中添加 UICollectionView 后 UI 突然发生变化