这就是我想要实现的目标:
我希望UITextField
中的UITableViewCell
仅在单元格触及时成为第一响应者。我希望只有当我在方法中将它设置为第一响应者时,文本字段才成为第一个响应者:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath`
知道如何实现这一目标吗?直接触摸文本字段时,永远不会调用tableView:didSelectRowAtIndexPath:
。
提前致谢。
答案 0 :(得分:2)
我想,你有一个自定义的UITableViewCell。因为你可以有一个UITextField成员。正确?
在自定义单元格类中,重写方法
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
:
在那里,如果选择== YES,则将文本字段作为第一响应者。否则,辞职第一响应者。
答案 1 :(得分:1)
让一个对象成为UITextField的委托并实现textFieldShouldBeginEditing:
;如果尚未选择单元格,则返回NO
。 (如果直接调用becomeFirstResponder
来绕过检查,您可能总是从此方法返回NO。)
答案 2 :(得分:1)
要在选择first responder
时将textField变为uitableviewcell
,请将textField用作property
,然后致电[self.textField1 becomeFirstResponder];
注意:由于每个单元格都有textField,因此您需要与UITableViewCell数量一样多的属性。
触摸textField时,编译器将不知道相应的行被选中。
为此,您需要使用tags
,例如textField.tag == 0
用于第一个textField,textField.tag ==1
用于第二个TextField,依此类推。在textFieldDidBeginEditing
中,您应检查标记,然后将该值与所选的相应行相关联。
这些都有意义吗? :)
答案 3 :(得分:1)
首先,您需要一个自定义表格单元格,您自己的UITableViewCell
子类。在该实现中,您需要实现hitTest:
以确定触摸发生的位置。在该方法中,您可以确定触摸是否实际位于UITextField的矩形内,如果是,则将其作为第一个响应者。以下是我为项目编写的一些代码的示例:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { if (self.editing) { if ([nickname pointInside:[self convertPoint:point toView:nickname] withEvent:nil]) return [nickname hitTest:[self convertPoint:point toView:nickname] withEvent:event]; return [super hitTest:point withEvent:event]; } return [self contentView]; }
在这种情况下,属性nickname
是自定义UITableViewCell中的UITextField。
围绕自我编辑的条件可能与您的申请有关,也可能与您的申请无关。这里的想法是告诉你如何使用hitTest:一般。