5

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

我想要一个UITextField只有UITableViewCell在单元格接触时才成为第一响应者的人。我希望文本字段只有在方法中将其设置为第一响应者时才成为第一响应者:

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

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

提前致谢。

4

4 回答 4

2

我猜,你有一个自定义的 UITableViewCell。在那你可以有一个 UITextField 成员。对?

在自定义单元格类中,覆盖该方法,

- (void)setSelected:(BOOL)selected animated:(BOOL)animated

其中,如果选择 == YES,则将文本字段设为第一响应者。否则,请辞去第一响应者的职务。

于 2011-07-08T06:46:24.043 回答
1

让一个对象成为 UITextField 的委托并实现textFieldShouldBeginEditing:NO如果尚未选择单元格,则返回。becomeFirstResponder(如果直接调用绕过检查,您可能总是可以从此方法返回 NO 。)

于 2011-07-07T16:52:24.107 回答
1

为了让 textField 成为first responder当 auitableviewcell被选中时,使用你的 textField 作为你的property,然后调用[self.textField1 becomeFirstResponder];

注意:您将需要与 UITableViewCells 数量一样多的属性,因为每个单元格都有一个 textField。

当一个 textField 被触摸时,编译器将不知道相应的行被选中。为此,您将需要使用tags,例如textField.tag == 0用于第一个 textField,textField.tag ==1用于第二个 TextField 等等。在textFieldDidBeginEditing您应该检查标签,然后将该值与选定的相应行链接。

这些有意义吗?:)

于 2011-07-07T16:54:32.690 回答
1

首先,您需要一个自定义表格单元格,您自己的UITableViewCell. 在该实施中,您需要实施hitTest:以确定触摸发生的位置。在该方法中,您可以确定触摸实际上是否在 UITextField 的矩形内,如果是,则使其成为第一响应者。这是我为项目编写的一些代码的示例:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    如果(自我编辑){
        if ([昵称 pointInside:[self convertPoint:point toView:nickname] withEvent:nil])
            return [昵称 hitTest:[self convertPoint:point toView:nickname] withEvent:event];

        return [super hitTest:point withEvent:event];
    }

    返回[自己的内容视图];
}

nickname在这种情况下,属性是自定义 UITableViewCell 中的 UITextField。

self.editing 周围的情况可能与您的应用程序相关,也可能不相关。这里的想法是向您展示通常如何使用 hitTest:。

于 2011-07-07T16:58:05.753 回答