关于使用多态显示 iPhone/iPad ViewControllers
Posted
技术标签:
【中文标题】关于使用多态显示 iPhone/iPad ViewControllers【英文标题】:On using polymorphism to display iPhone/iPad ViewControllers 【发布时间】:2014-02-23 18:09:49 【问题描述】:在为 iPhone 和 iPad 应用程序开发通用二进制文件时,我注意到许多开发人员使用独特的 ViewController 并添加
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
分开他们的逻辑。我在 Apple 的 ios 文档中也看到过很多次。
但是,我真的不是这种方法的忠实拥护者,因为它会使代码变得混乱,并且难以维护,尤其是当 iPad 和 iPhone 的逻辑完全不同时。
所以我一直在考虑使用一个抽象的 ViewController 类并每次都为 iPhone 或 iPad 实例化一个特定的 ViewController(取决于平台)。然后,我将在每个 ViewController 转换中使用一个“if”,并且可以使用多态性来使代码更简洁。
这是推荐的做事方式吗?谢谢!
【问题讨论】:
【参考方案1】:两种方式都行。这部分与个人偏好有关,部分与 2 个平台实现的不同之处有关。如果它们相似,那么您应该会发现需要条件代码的地方很少。同样,如果它们不同并且您选择使用不同的类,那么可能唯一的条件代码将是加载根视图控制器。之后,每个类都将是特定于平台的(或具有特定于平台的子类),因此通常会在那里处理特殊的逻辑和处理推送/呈现视图控制器。
【讨论】:
【参考方案2】:实际上,如果您使用两个不同的故事板,则根本不需要“如果”。如果这是 iPad,您将加载一个主故事板,如果这是 iPhone,您将加载一个不同的主故事板(您在 info.plist 文件中设置)。现在,如果您愿意,您实际上可以拥有完全不同的视图控制器集(如果界面完全不同,那可能不是一个坏主意)。
我在这种情况下使用了子类化,但我总是觉得它非常混乱。这可能是子类化的问题!有更好的方法来表达通用代码(即在不同的类中,而不是在视图控制器中)。
【讨论】:
以上是关于关于使用多态显示 iPhone/iPad ViewControllers的主要内容,如果未能解决你的问题,请参考以下文章
仅 iPhone 应用程序中的 UIWebView 显示在 iPad 上
如何在 UIPickerView 上添加 UIToolbar? (iPhone/iPad)