在表格视图中访问我的自定义单元格

Posted

技术标签:

【中文标题】在表格视图中访问我的自定义单元格【英文标题】:accessing my custom cell in a tableview 【发布时间】:2013-11-18 18:17:33 【问题描述】:

现在我有一个这样构建的 tableview:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    static NSString *CellIdentifier = @"PhotoCell";
    PhotoSummaryCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    // Configure the cell...

    NSString *photoCaption = [[[self.form valueForKey:@"photos"] objectAtIndex:indexPath.row] objectForKey:@"caption" ];

    cell.textfieldCaption.text = photoCaption;
    cell.textfieldCaption.tag=indexPath.row;

    return cell;

我想要做的是获取已编辑文本字段的索引?我连接了自定义单元格中的文本字段,并在结束编辑时执行了一个操作:

- (IBAction)getIndexForCaption:(id)sender 

[[[self.form valueForKey:@"photos"] objectAtIndex:cell.textfieldCaption.tag] setObject:cell.textfieldCaption.text forKey:@"caption"];


但是现在情况如何,我没有“单元格”,所以我收到未声明的标识符“单元格”错误。在这种情况下如何获取自定义单元格?

【问题讨论】:

假设sender 是单元格中的UITextField,从文本字段向上走superview,直到获得表格视图单元格。 ***.com/questions/18743099/… 的答案显示了查找“封闭”表格视图单元格的不同方法。 仅供参考 - 小心使用 indexPath.row 作为标签。这仅在表格的行无法插入(除了末尾之外)、删除或重新排序时才有效。 【参考方案1】:

有几个选项可以做到这一点。就个人而言,我更喜欢为PhotoSummaryCell 创建一个带有额外属性的 UITextField 子类。您可以在单元格被回收时设置此属性,这将使获取文本字段的索引变得如此简单:

NSIndexPath *indexOfTextField = [self.tableView indexPathForCell:textField.cell];

当然,您可以逐步遍历文本字段视图层次结构,直到找到一个单元格,或者将索引路径的行保存到 @rmaddy 和 @Martin R 指出的文本字段 tag 属性中。

确保将 cell 属性声明为 weak 以避免保留循环。

【讨论】:

我不确定你的意思。我需要再上课吗?然后呢? @BluGeni 是的,你创建了另一个类,它是 UITextField 的子类。然后,将自定义属性添加到单元格的该文本字段(弱引用)。然后用这个新的子类替换单元格上的当前文本字段。当单元格被重用(cellForRow...)时,您将当前单元格设置为文本字段的单元格属性。您现在可以通过直接从文本字段 ex textField.cell 访问它来引用单元格。

以上是关于在表格视图中访问我的自定义单元格的主要内容,如果未能解决你的问题,请参考以下文章

我的自定义单元格未显示在我的表格视图中

故事板中的自定义表格视图单元格布局似乎无效

UITableview中的按钮修改当前单元格自定义

表格单元格内的滚动视图内的自定义视图未响应事件

显示零的自定义表格单元格

从 Swift 中的自定义数据单元开始