【问题标题】:Displaying complex data in a UITableViewCell在 UITableViewCell 中显示复杂数据
【发布时间】:2013-07-31 18:12:18
【问题描述】:

我有一个自定义的UITableViewCell 类,用于显示相当复杂的数据集。

基本上该单元格显示一个Match 对象。但这样做会显示有关两个Teams 的信息、分数、经过的时间等等。

思考 MVC 和干净的代码。

我应该只传递Match 对象并让单元格做所有事情吗?或者将单元格的不同元素(team1NameLabel、team1ScoreLabel、team2NameLabel 等)公开并在UITableViewController 中单独设置它们是更好的做法?

第一种方法使UITableViewController 更干净,但我依靠UITableViewCell 来“了解”Match 类、Team 类等...

第二种方法使UITableViewController 的工作量更大,但随后使UITableViewCell 显示为“哑”。然后它所做的就是在单元格内布置信息。它对所显示的信息一无所知。

【问题讨论】:

    标签: ios objective-c model-view-controller uitableview


    【解决方案1】:

    这两种方式都很好,但我个人会选择第二种选择,即公开@property 的表格视图,如有必要,还可以公开网点。

    但是,如果您真的想选择第一个选项,我建议将任何对象传递给单元以实现一个协议,从而公开一些方法:

    @protocol tableViewCellProtocol
    
        -(NSString*)titleForCell;
        -(NSString*)descriptionForCell;
    

    然后你可以“传递协议”而不是对象。

    [mytableCell renderObject:objectImplementingProtocol];
    

    这样您可以稍微解耦对象本身,并准备单元格以与其他对象重用。

    【讨论】:

      【解决方案2】:

      IMO 最好将 Match 对象传递给您的表格视图单元格,并且更像 MVC。

      您在 Internet 上找到的许多代码(如果我记得很清楚,甚至是 Apple 示例)都没有这样做。您可以在视图控制器中多次看到在 tableView:cellForRowAtIndexPath: 中调用的 configureCell 方法。

      我更喜欢将模型对象传递给单元格,它使我的视图控制器代码更简单,单元测试也更简单:当我测试我的视图控制器时,我只验证模型对象是否传递给单元格,然后在表格视图单元格测试中,我验证标签的测试是否设置为预期值。有人可能会说这是让视图了解模型,但我认为这没有什么大问题。

      【讨论】:

        【解决方案3】:

        我会遵守这些规则:

        • 单元格应该只有用于显示各种数据位的出口。这是一个视图,所以它不应该包含任何逻辑。

        • 控制器应获取Match 数据,必要时解析并进行计算,然后填充单元格。它是一个控制器,因此这是它在 MVC 上下文中的主要功能。

        【讨论】:

        • 太好了,我自己也倾向于这个。谢谢
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多