Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 通用应用程序-视图控制器->;每个设备一个?_Ios_Objective C_Uiviewcontroller - Fatal编程技术网

Ios 通用应用程序-视图控制器->;每个设备一个?

Ios 通用应用程序-视图控制器->;每个设备一个?,ios,objective-c,uiviewcontroller,Ios,Objective C,Uiviewcontroller,所以我很快就要为iOS开发通用应用程序了。实际上我从来没有这样做过,所以我不确定这里的最佳实践是什么,但我已经能够想出一些解决方案,而不是为每个设备使用单独的VC。一般问题是UI(过渡、定位、动画等),因为每个设备的UI都不同。我非常希望避免重复的逻辑代码或为逻辑创建一些容器,因为VCs是逻辑的场所。以下是我的想法: 委托-我将为每个VC创建协议,然后创建两个实现该协议的类(包含特定于设备的逻辑),在VC中,我将根据当前运行的设备应用程序将委托设置为这些类之一 块-非常像代理,但更混乱 继承-

所以我很快就要为iOS开发通用应用程序了。实际上我从来没有这样做过,所以我不确定这里的最佳实践是什么,但我已经能够想出一些解决方案,而不是为每个设备使用单独的VC。一般问题是UI(过渡、定位、动画等),因为每个设备的UI都不同。我非常希望避免重复的逻辑代码或为逻辑创建一些容器,因为VCs是逻辑的场所。以下是我的想法:

  • 委托-我将为每个VC创建协议,然后创建两个实现该协议的类(包含特定于设备的逻辑),在VC中,我将根据当前运行的设备应用程序将委托设置为这些类之一
  • 块-非常像代理,但更混乱
  • 继承-与委托几乎相同,但不是协议和2个委托类以及一个VC,而是3个VC-1。基地2。iphone3。ipad-2和3将从1继承并实现/覆盖特定于设备的方法

这是我能想到的3个,即使它们基本上是相同的,但实现方式不同。我个人喜欢代表,但我对此完全是新手,我想征求你的意见。我正在以正确的方式考虑这个问题,或者是否有其他方法或最佳实践?

在大多数情况下,您实际上不需要创建不同的视图控制器

如果使用情节串连板,则可以为iPhone和iPad使用的通用视图控制器提供一个情节串连板,并为iPhone和iPad分别提供另外两个情节串连板。然后使用IBOutlets在代码中引用

iPad版通常有更多的插座,因为屏幕更大,但代码在iPhone版中仍然可以工作


如果在你的例子中,分割故事板是不够的,我建议在一个VC类的不同文件中使用两个类别。然后将通用代码保存在普通文件中,并在类别中添加专门的功能代码。

我将为适用于iPad和iPhone的所有代码创建一个基本视图控制器,然后为从基本视图控制器继承的每个代码创建一个单独的视图控制器。这样,您只需覆盖包含特定于设备的代码的方法,通常是与UI相关的代码。

是的,有两个故事板是肯定的,但当涉及到(例如)动画时,您必须分别为每个设备执行,这两种情况下(iphone和ipad)都会在具有特定数据的特定事件中发生数据和事件是相同的,但UI行为是相同的,这就是我认为代理解决方案会派上用场的地方,这意味着动画代码将在代理中,无论您在什么设备上,调用动画的代码都不重要,因为代理已经是该设备的正确代理,它只知道通过调用该方法。。。。。。。。某些动画会修改该操作的UI。在这种情况下,我看不出类别有什么帮助。它允许您将代码与一个类(您的vc类)关联,但有大量的文件。我知道类别是什么,但我无法想象如何使用它们来解决我描述的情况。在这种情况下,我只会使用它们来分发代码。例如,在(iPad)类别中,我会有一个“pushAnimatedIPad”功能,在(iPhone)类别中,我会有一个pushAnimatedIPhone功能。那么你准备继承了吗?听起来不错。我仍然喜欢委托方法(基本上与继承相同)。