如何使用 cellForRowAtIndexPath 从 TableView 中获取自定义 UITableViewCell?

Posted

技术标签:

【中文标题】如何使用 cellForRowAtIndexPath 从 TableView 中获取自定义 UITableViewCell?【英文标题】:How can I get a custom UITableViewCell from a TableView using cellForRowAtIndexPath? 【发布时间】:2013-07-11 13:53:53 【问题描述】:

我的一个视图中有一个表,我想使用该表来允许用户输入数据。为此,我创建了一个完美运行的自定义 UITableViewCell。

我在尝试从每个单元格中取出文本时出现问题。我浏览了所有文档,但找不到任何解决方案。任何帮助将不胜感激!

这个方法的代码是:

    Subject *subject = [self.arrayOfSubjects objectAtIndex:i];

    AddSubjectDetailsCell *cell;
    NSIndexPath *indexPath = [[NSIndexPath alloc] initWithIndex:i];
    cell = [tableView cellForRowAtIndexPath:indexPath];

    subject.title = cell.subjectTitleField.text;
    subject.room = cell.subjectRoomField.text;
    subject.teacher = cell.subjectTeacherField.text;

有没有人可以将常规单元格转换为自定义的一种或另一种方式来从文本字段中提取文本?

谢谢!

【问题讨论】:

您的自定义单元格是什么样子的?它是从 uitableviewcell 扩展而来,还是您只是在使用 uitableviewcell 并将自定义视图放入其中? 【参考方案1】:

你已经得到了一个AddSubjectDetailsCell 的实例,它只是作为父类型UITableViewCell 返回给你,因为这就是UITableView 知道的所有内容。您所要做的就是将其转换为特定类型,如下所示:

AddSubjectDetailsCell *cell;
NSIndexPath *indexPath = [[NSIndexPath alloc] initWithIndex:i];
cell = (AddSubjectDetailsCell *)[tableView cellForRowAtIndexPath:indexPath];

【讨论】:

【参考方案2】:

@Timothy 的回答可能是一个解决方案,但为什么不将模型对象链接到实例化时的自定义单元格?

最终您可以直接在单元实现中更新您的模型,而不是查询 UI。

我肯定会为每个单元格添加一个对相应 Subject 的弱引用,然后在您执行单元格用户操作时对其进行更新。

类似这样的某种设计,即使没有封装:http://eppz.eu/blog/custom-uitableview-cell/

【讨论】:

以上是关于如何使用 cellForRowAtIndexPath 从 TableView 中获取自定义 UITableViewCell?的主要内容,如果未能解决你的问题,请参考以下文章

Swift:以编程方式重新排序表行

UITableView didSelectRowAtIndexPath 从未调用

禁用所有 UITableViewCells 用户交互

Swift tableview 单元格单选按钮实现

表格视图延迟(即使在删除手势识别器后)

UITableView 可重用的自定义单元格在子视图中显示错误的内容