我使用标签和checkaMarksAccessory创建了单元格。最后几个单元格有UITextFields,可以用户修改,而那些在UIControlEventEditingDidEnd上有选择器,我想要改变要检查的单元格的状态。
如何在选择器中获取单元格?没有对象的某些parentView?
我将对象插入单元格的方式。
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 :(得分:1)
我不确定假设cell.contentView.superview == cell
是否安全。 Apple会改变这个吗?我对此表示怀疑。但是,我没有在文档中看到单元格的内容视图是单元格的直接子视图。
如果您已将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
范围内,我在文档中也没有看到。
或许,最好的解决方案是重新架构您的代码,这样您就不需要从cell
获取contentView
,或者如果必须,那么从{的子视图添加实例变量{1}}至contentView
。
答案 1 :(得分:0)
好的,所以方法是使用superview。 superview是拥有该对象的组件。如果我想从UITextField获取UITableViewCell,我使用[[UITextField superview] superview]。