我希望UITableViewCell中的UItextField只有在单元格触摸时才成为第一响应者

时间:2011-07-07 16:47:09

标签: ios ios4 first-responder

这就是我想要实现的目标:

我希望UITextField中的UITableViewCell仅在单元格触及时成为第一响应者。我希望只有当我在方法中将它设置为第一响应者时,文本字段才成为第一个响应者:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath`

知道如何实现这一目标吗?直接触摸文本字段时,永远不会调用tableView:didSelectRowAtIndexPath:

提前致谢。

4 个答案:

答案 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:一般。