【问题标题】:Universal app - view controllers -> one for each device?通用应用程序-视图控制器->每个设备一个?
【发布时间】:2013-04-10 22:43:19
【问题描述】:

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

  • 委托 - 我将为每个 VC 创建协议,然后创建 2 个实现此协议的类(包含特定于设备的逻辑),在 VC 中,我将根据当前正在运行的设备应用程序将委托设置为这些类之一
  • blocks - 很像代表,但更混乱
  • 继承 - 与委托几乎相同,但不是协议和 2 个委托类和一个 VC,而是 3 个 VC - 1. base 2. iphone 3. ipad - 2 和 3 将从 1 继承并实现/覆盖特定于方法到设备

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

【问题讨论】:

    标签: ios objective-c uiviewcontroller


    【解决方案1】:

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

    【讨论】:

    • 那么你准备好继承了吗?听起来不错。我还是喜欢委托方式(基本上和继承一样)。
    【解决方案2】:

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

    如果您使用故事板,您可以为 iPhone 和 iPad 使用的通用视图控制器创建一个故事板,并为 iPhone 和 iPad 分别添加两个故事板。然后你使用 IBOutlets 在你的代码中引用。

    通常你在 iPad 版本中有更多的出口,因为屏幕更大,但代码在 iPhone 版本中应该仍然可以工作。

    如果在您的情况下拆分情节提要还不够,我建议在 VC 类的不同文件中使用两个类别。然后在普通文件中保留通用代码,在分类中添加专用功能代码。

    【讨论】:

    • 是的,肯定有 2 个故事板,但是当涉及到(例如)动画时,您必须为每个设备单独执行此操作,这些发生在具有某些数据的某些事件上,并且在这两种情况下( iphone 和 ipad) 数据和事件是相同的,但 UI 行为是相同的,这就是我认为委托解决方案会派上用场的地方,这意味着动画代码将在委托中,无论您使用什么设备,调用动画的代码都不会关心,因为委托已经是设备的正确委托人,它只知道通过调用该方法 ....
    • .... 某些动画会修改该操作的 UI。在这种情况下,我真的认为类别没有帮助。
    • 它允许您将代码关联到一个类,即您的 vc 类,但文件很大。
    • 我知道类别是什么,但我无法想象如何使用它们来解决我描述的情况。
    • 在这种情况下,我只会使用它们来分发代码。例如,在 (iPad) 类别中,我将有一个“pushAnimatedIPad”功能,在 (iPhone) 类别中,我将有一个 pushAnimatedIPhone 功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 2013-03-13
    相关资源
    最近更新 更多