【问题标题】:UITableViewCell from contentView subview来自 contentView 子视图的 UITableViewCell
【发布时间】:2012-02-28 14:26:48
【问题描述】:

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

【问题讨论】:

    标签: ios5 uitableview subviews


    【解决方案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:

    如果你必须遍历superviews,我认为使用像下面这样的函数会更安全一些。

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

    但该函数仍假定 contentView 在其 cell 内,我在文档中的任何地方也没有看到。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2011-01-04
        • 2012-10-07
        • 2011-09-14
        • 1970-01-01
        • 2019-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多