使用多态来显示iPhone / iPad ViewControllers

时间:2014-02-23 18:09:50

标签: ios iphone ipad

在为iPhone和iPad应用程序开发通用二进制文件时,我注意到许多开发人员使用独特的ViewController并添加

  

if(UI_USER_INTERFACE_IDIOM()== UIUserInterfaceIdiomPad)

分开他们的逻辑。我在Apple的iOS文档中也看过很多次。

然而,我真的不是这种方法的忠实粉丝,因为它会使代码变得混乱并使其难以维护,尤其是当iPad和iPhone逻辑完全不同时。

所以我每次都在考虑使用抽象的ViewController类并为iPhone或iPad(取决于平台)实例化特定的ViewController。然后我会在每个ViewController转换中有一个“if”,我可以使用多态来使代码更清晰。

这是推荐的做事方式吗?谢谢!

2 个答案:

答案 0 :(得分:1)

两种方式都有效。这部分是关于个人偏好,部分是关于2平台实现的差异。如果它们相似,那么您应该发现很少需要条件代码的地方。同样,如果它们不同并且您选择使用不同的类,则可能唯一的条件代码将是加载根视图控制器。之后,每个类都将是特定于平台的(或者具有特定于平台的子类),因此通常会在那里处理特殊的逻辑和处理推送/呈现视图控制器。

答案 1 :(得分:1)

实际上,如果您使用两个不同的故事板,则根本不需要“if”。你有一个主要的故事板,如果这是一个iPad,加载一个不同的主故事板,如果这是一个iPhone(你在info.plist文件中设置)加载。现在,如果您愿意,您实际上可以拥有完全不同的视图控制器集(如果接口完全不同,那可能不是一个坏主意)。

我在这种情况下使用了子类,但我总觉得它非常令人困惑。这可能是子类化的问题!有更好的方法来表达公共代码(即在不同的类中进行,而不是在视图控制器中)。