UITableView与自定义UITableViewCell

时间:2011-03-16 14:19:02

标签: ios uitableview

我有TableView我有一个UITableViewCell。在UItableViewController中我有UITextField。 在我点击TextField时的应用程序中。它是开放的。 但方法 - tableView:willSelectRowAtIndexPath:               - tableView:didSelectRowAtIndexPath:不起作用,因为我们不直接点击行。 我怎么知道当前行的indexPath.row?

3 个答案:

答案 0 :(得分:0)

cellForRowAtIndexPath方法中,通过将当前行的tag属性设置为indexPath.row的值来将当前行分配给UITextField

[yourTextfield setTag:indexPath.row];

当文本字段完成编辑后,您可以读出它的标记属性,然后就完成了。

答案 1 :(得分:0)

你可以:

  1. 子类UITextField并为其提供indexPath属性。在cellForRowAtIndexPath中,创建textField并将其添加到单元格时,请指定该属性。然后在textField委托方法中,您将可以访问正确的indexPath。此方法还允许您将其他信息与您可能需要的textField相关联。

  2. 使用UIControl的操作方法:

    - (void)textFieldDidChangeValue:(id)sender withControlEvents:(UIEvent *)event {
        NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:
            [[[event touchesForView:sender] anyObject] locationInView:self.tableView]];
    
        //Do whatever you need to, now that you have the indexPath
    }
    

    此方法避免了需要子类化。

答案 2 :(得分:0)

只要你有对tableView和textField的引用,这样的东西应该可以工作。细胞也需要可见:

UITableViewCell* tvc = (UITableViewCell*)[textField superview];
while ( tvc != nil && ![tvc isKindOfClass: [UITableViewCell class]] )
    tvc = [tvc superview];

NSIndexPath* ip = [tableView indexPathForCell: tvc];