Ios 关于使用多态性显示iPhone/iPad ViewController

Ios 关于使用多态性显示iPhone/iPad ViewController,ios,iphone,ipad,Ios,Iphone,Ipad,在为iPhone和iPad应用程序开发通用二进制文件时,我注意到许多开发人员使用独特的ViewController并添加 if(UI\u USER\u INTERFACE\u IDIOM()==UIUserInterfaceIdiomPad) 把他们的逻辑分开。我在苹果的iOS文档中也看到过很多次 然而,我真的不太喜欢这种方法,因为它会使代码变得混乱,使维护变得更加困难,尤其是在iPad和iPhone逻辑完全不同的情况下 所以我考虑使用一个抽象的ViewController类,每次都为iPhon

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

if(UI\u USER\u INTERFACE\u IDIOM()==UIUserInterfaceIdiomPad)

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

然而,我真的不太喜欢这种方法,因为它会使代码变得混乱,使维护变得更加困难,尤其是在iPad和iPhone逻辑完全不同的情况下

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


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

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

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

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