【问题标题】:iOS component reusability: views and view controllersiOS 组件可重用性:视图和视图控制器
【发布时间】:2013-03-17 21:08:08
【问题描述】:

非常基本的问题,我似乎找不到直接的答案。

这就是交易:我有一个 UI 片段,我想在几个界面中重用它。特别是,它应该作为子视图包含在作为导航堆栈一部分的父视图中,但也可用作独立的模态视图。有问题的子视图只是一个自定义的 UITableView,其数据绑定方法由子控制器实现。

子视图应该绑定到一个特定的模型对象,从那里获取所有数据。换句话说,它的控制器基于该目标模型对象为 UITableViewDataSource 实现必要的数据绑定方法。

对我来说很明显我需要创建一个控制器来表示这个可嵌入的子视图,因为这些数据绑定方法的实现在所有实例中都是相同的,但似乎在 iOS 5 之前(我目前需要支持 iOS 4+) 强烈建议不要将视图控制器嵌入到其他视图控制器中。

这与 Apple 据称在 Cocoa 中采用的 MVC 模式完全违反直觉(我仍然不相信他们实现的是 MVC)。如果我不允许嵌入子视图控制器,我应该如何在不同的父接口中重用我的子视图控制器的数据绑定/模型逻辑?

【问题讨论】:

    标签: ios objective-c cocoa-touch


    【解决方案1】:

    您可以创建一个控制器类(只是一个常规的NSObject 子类)并为每个需要嵌入子视图的视图控制器实例化,而不是使用视图控制器来提供数据。

    编辑:所以你会做类似[[MyController alloc] initWithTableView:tableView]的事情。

    【讨论】:

    • ...谁创建了 tableView?
    • 哦,我明白了,我只需将 tableView 添加到我需要的每个父接口,然后使用此自定义控制器类的实例将其“绑定”到我的数据源。好的,这可能有效。
    • 或者你可以在MyController 上有一个tableView 属性……你可以在视图控制器的初始化方法中实例化一个MyController 对象并将它存储在一个实例变量中。然后在viewDidLoad 中,您将使用全新的UITableView 对象设置tableView 属性。
    猜你喜欢
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 2015-12-17
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多