使用多态性显示 iPhone/iPad ViewControllers



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

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

分离他们的逻辑。我在Apple的iOS文档中也多次看到过这种情况。

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

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

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

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

实际上,

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

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

最新更新