1

我已经创建了带有标签并使用 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];
4

2 回答 2

1

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

如果您已将 a 添加UIGestureRecognizer到单元格内容视图的子视图之一,则可以通过以下方式获取对单元格的引用:

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

表格视图动画和手势示例代码使用indexPathForRowAtPoint:这种方式。

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

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

但是该函数仍然假设contentView在它的范围内cell,我也没有在文档中的任何地方看到它。

所以也许,最好的解决方案是重新架构你的代码,这样你就不需要cell从,或者如果你必须,然后从tocontentView的子视图添加一个实例变量。contentViewcell

于 2013-10-17T16:15:43.327 回答
0

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

于 2012-03-13T13:44:07.740 回答