【问题标题】:iPad UIViewController best practice for complicated interfacesiPad UIViewController 复杂界面的最佳实践
【发布时间】:2012-01-24 15:01:22
【问题描述】:

我想为 iPad 开发一个应用程序,使用类似于此链接中所示的布局:

https://skitch.com/sparkoletto/g13ck/ipad-views-layout

正如您在一页上的图片中看到的那样,我想插入一个 UITableView (B)、两个 UIScrollView(一个垂直 (D) 和一个水平 (A))和一个简单的 UIView (C)。

开发此类接口的最佳方法是什么?

最好使用单个 ViewController 来管理我需要的所有视图,或者为每个视图创建一个 ViewController,然后将它们全部组合到另一个 UIViewController 中?

谢谢

【问题讨论】:

    标签: ios ipad layout uiviewcontroller


    【解决方案1】:

    我不同意@TomSwift。当这些事情变得复杂时,将它们分解成自己的视图控制器非常有帮助。您将创建一个正确类型的视图控制器,然后在某个时候[self.view addSubview:vc.view]

    制作一个复杂的视图控制器的问题在于,它变成了代表和数据源,用于处理单个子视图内部细节的太多事情。例如,您的委托方法现在需要检查哪个 tableview 正在与它们对话。

    拆分它们还可以更轻松地管理旋转,特别是如果您希望在每个方向上显示一组不同的视图。这也有利于内存管理,因为 VC 可以自动卸载您不再使用的视图。

    把事情分解得太小当然也是一个问题。拥有单独的视图控制器是有代价的,尤其是当它们相互交互时。对何时是正确的时间有良好的感觉是经验丰富的开发人员的标志。但是对于你展示的观点,我几乎肯定会打破它。你的情况看起来很像UISplitViewController

    【讨论】:

    • 感谢您的回答!你为什么说“拆分它们也可以更容易地管理旋转,特别是如果你想在每个方向显示一组不同的视图。”?在这种情况下如何处理旋转每个视图?
    • 这里的重点是您想要隐藏一些纵向或横向视图(例如您的侧滚动条)的情况。使用单独的视图控制器,您可以让您的主视图控制器删除(nil)整个子视图及其视图控制器。然后,当您旋转回来时,您可以重新创建它。使用单独的 nib 文件,这很容易。如果所有内容都在一个 nib 文件中,那么您必须手动进行大量编码才能获得相同的好处。
    • 我尝试按照您的建议进行操作,因为我认为这是最好的方法,但是当界面旋转时,某些方法(例如-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation)仅在 MasterViewController 中调用,而在其他方法中不调用。这是正常的?在这种情况下,如果我必须在界面从横向旋转到纵向时调整另一个 ViewController 的子视图大小,反之亦然,我必须为每个子 UIViewController 调用一个方法来调整它们的视图大小?
    • 这是正确的。您需要将视图控制器事件消息传递给您的子视图控制器。您通常只需将您的子 vcs 存储在一个数组中,然后循环遍历它即可。
    • 谢谢 Rob,你帮了大忙。
    【解决方案2】:

    可能是一个单一的视图控制器,IMO,除非您打算在其他地方重用这些窗格中的一些。在这种情况下,您可以使用单个视图实现“容器视图控制器”来处理子视图控制器的布局。

    通常,视图控制器管理“全屏”(或几乎全屏)视图。例外情况相当罕见 - UISplitViewController 就是其中之一。

    【讨论】:

      猜你喜欢
      • 2018-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-04
      • 1970-01-01
      • 2021-03-13
      • 2017-09-21
      • 1970-01-01
      相关资源
      最近更新 更多