【问题标题】:UIViewController and UITableViewController shared logicUIViewController 和 UITableViewController 共享逻辑
【发布时间】:2012-05-01 17:50:04
【问题描述】:

我有一个名为BaseViewController 的类继承自UIViewController,还有一个名为BaseTableViewController 的类继承自UITableViewController。这两个类都有相同的共享逻辑(即旋转处理、辅助方法等)。现在,代码只是在两者中重复。我考虑过只创建一个 ViewControllerHelper 类并将其公开为公共属性,但我想知道是否有更优雅的解决方案。

【问题讨论】:

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


    【解决方案1】:

    如果您不需要任何共享的 ivars/属性,您可以为 UIViewController 编写扩展

    【讨论】:

    • 太棒了,一个绝妙的主意,我不需要任何 ivars 或属性,只需要辅助方法,所以这是完美的!
    • 嗯。如果有人需要额外的属性,你有什么建议?我一直在考虑同样的问题。组合似乎并不理想,因为我们必须为所有共享方法编写包装器。
    • @jonathan-cichon 扩展不能提供实现,对吧?在这种情况下,你必须在 UIViewController 和 UITableViewController 中提供相同的实现吗?
    • @DavidLiu 您在扩展中的属性和 ivars 有点受限,但您可以使用 objc_setAssociatedObjectobjc_getAssociatedObject 解决这些限制
    • @JonathanCichon 我不是说属性。我的意思是扩展只提供方法声明,不提供实现。
    【解决方案2】:

    我会创建一个像 BaseViewController 这样带有两个初始化器的通用类:

    initWithList:(用于表格视图)和initWithSomething: 用于简单的 UIViewController 内容。这些初始化程序中的每一个都将加载单独的 xib(一个以 UITableView 作为主视图,其他 - 就像简单的 UIView)。

    您将在每个实例中使用相同的方法。它只需要实现UITableViewDelegateUITableViewDataSource 协议。

    【讨论】:

      猜你喜欢
      • 2011-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-22
      • 1970-01-01
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多