2012-02-28 95 views
1

我已经使用checkaMarksAccessory创建了带有标签的单元格。最后几个单元格有UITextFields可以用户修改,并且那些在UIControlEventEditingDidEnd上有选择器,我想要更改要检查的单元格的状态。contentView子视图中的UITableViewCell

我如何获得选择器中的单元格?没有对象的一些父视图?

将对象插入单元格的方式。

UITextField *textfield = [[UITextField alloc] initWithFrame:CGRectMake(10, 25, 200, 30)]; 
    [textfield setBorderStyle:UITextBorderStyleRoundedRect]; 
    [textfield addTarget:self action:@selector(vybavaDidFinishEdit:) forControlEvents:UIControlEventEditingDidEnd]; 
    [cell.contentView addSubview:textfield]; 

回答

0

好的,所以方法是使用超级视图。超级视图是拥有该对象的组件。如果我想从UITextField获取UITableViewCell,我使用了[[UITextField superview] superview]。

1

我不确定是否安全地假设cell.contentView.superview == cell。苹果公司可能改变这一点?我对此表示怀疑。但是,我没有看到文档中的任何地方都说单元格的内容视图是单元格的直接子视图。

如果您已经添加了一个UIGestureRecognizer到您的单元格的内容视图的子视图中的一个,那么你就可以得到一个对单元格引用:

NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:[gestureRecognizer locationInView:self.tableView]]; 
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 

Table View Animations and Gestures sample code使用indexPathForRowAtPoint:这种方式。

如果您必须遍历超级视图,我认为使用下面的函数会更安全一些。

UITableViewCell *ACMContentViewGetCell(UIView *view) 
{ 
    while ((view = view.superview)) { 
     if ([view isKindOfClass:[UITableViewCell class]]) { 
      return (UITableViewCell *)view; 
     } 
    } 
    return nil; 
} 

但是,这个功能还是假定contentView是其cell,这也是我没有看到文档中的任何位置内。

因此,也许,最好的解决办法是重新构建你的代码,这样你就不需要从contentView得到cell,或者如果必须,那么从contentView子视图添加一个实例变量cell

相关问题