Ios5 contentView子视图中的UITableViewCell

Ios5 contentView子视图中的UITableViewCell,ios5,uitableview,subviews,Ios5,Uitableview,Subviews,我已经创建了带有标签的单元格,并使用了checkaMarksAccessory。最后几个单元格有UITextFields,可以使用modifi进行修改,而那些单元格在uicontrolEventEditingDiEnd上有选择器,我想将单元格的状态更改为选中 如何在选择器中获取单元格?没有对象的父视图吗 我将对象插入单元格的方式 UITextField *textfield = [[UITextField alloc] initWithFrame:CGRectMake(10, 25, 2

我已经创建了带有标签的单元格,并使用了checkaMarksAccessory。最后几个单元格有UITextFields,可以使用modifi进行修改,而那些单元格在uicontrolEventEditingDiEnd上有选择器,我想将单元格的状态更改为选中

如何在选择器中获取单元格?没有对象的父视图吗

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

    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];

好的,方法是使用superview。superview是拥有该对象的组件。如果我想从我使用的UITextField[[UITextField superview]superview]获取uitableview单元格。

好的,那么方法就是使用superview。superview是拥有该对象的组件。如果我想从我使用的UITextField[[UITextField superview]superview]获取UITableViewCell.

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

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

NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:[gestureRecognizer locationInView:self.tableView]];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
以这种方式使用InExpathForRowatPoint:索引

如果必须遍历SuperView,我认为使用下面这样的函数更安全

UITableViewCell *ACMContentViewGetCell(UIView *view)
{
    while ((view = view.superview)) {
        if ([view isKindOfClass:[UITableViewCell class]]) {
            return (UITableViewCell *)view;
        }
    }
    return nil;
}
但该函数仍然假定
contentView
位于其
单元格中,我在文档中也没有看到该单元格


因此,最好的解决方案可能是重新构建代码,这样您就不需要从
contentView
获取
cell
,或者如果必须的话,再从
contentView
的子视图添加一个实例变量到
cell

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

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

NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:[gestureRecognizer locationInView:self.tableView]];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
以这种方式使用InExpathForRowatPoint:
索引

如果必须遍历SuperView,我认为使用下面这样的函数更安全

UITableViewCell *ACMContentViewGetCell(UIView *view)
{
    while ((view = view.superview)) {
        if ([view isKindOfClass:[UITableViewCell class]]) {
            return (UITableViewCell *)view;
        }
    }
    return nil;
}
但该函数仍然假定
contentView
位于其
单元格中,我在文档中也没有看到该单元格

因此,最好的解决方案可能是重新构建代码,这样您就不需要从
contentView
获取
cell
,或者如果必须的话,可以从
contentView
的子视图向
cell
添加一个实例变量