了解在iOS中查看控制器嵌套

Ada*_*eld 17 cocoa nested interface viewcontroller ios

在过去的几天里,我一直在试着理解这个看似基本的iOS开发概念:

  • 如果我想在同一个"屏幕"中显示和使用两个或更多View Controller,请执行以下操作:

    1. 根据Apple的"每个屏幕内容只有一个VC",这是不可取的
    2. 通过代码添加VC完全可以实现
    3. 没做完.相反,使用一个VC并简单地添加模仿所需视图控制器功能的代码.

让我重新说一下:

如果我想在一个iPad应用程序中,UIView(A)占据屏幕左侧的大部分,而第二个UIView(B)占据屏幕右侧的其余部分,我想要向UIViewB 添加一个按钮,当点击它时会使用模态转换来向上滑动UITableview以替换UIView B,这UITableview将是一个典型的行为UITableviewController,当用户从表中选择一个项目时,典型的事件将被发送到tableview控制器推送一组新项目,这可能吗?

在我看来,如果我已经能够轻松地创建两个单独的UIViewControllers,并且在一个VC中有一个按钮以模态方式调出第二个VC,为什么我不能将这个功能结合起来,这样一个VC有两个子VC,那些孩子VC处理自己的模态转换.

或者在这种情况下最好的做法就是只需要一个VC来处理所有内容,然后在对各种UI元素进行各种点击后手动处理各种视图中的幻灯片动画?

正如你所知道的那样,我认为我已经阅读了太多不同的,相互矛盾的对类似问题的回答,我已经完全混淆了什么了.如果有人在那里了解我得到了什么,可以提供帮助解释或一些指示我非常欣赏它.

Nic*_*ood 11

答案取决于您是否需要支持iOS 4.如果是,答案是:

答案1 - 除了Apple自己的容器控制器,尤其是UITabBarController,UINavigationController,UISplitViewController,UIPageViewController和UIPopoverController(我是否错过了?)没有正确支持的方法让多个视图控制器在同一屏幕上处于活动状态,管理不同的部分的观点.查看控制器方法,例如presentModalViewController等,都假设有一个"最前面"的视图控制器拥有整个屏幕,如果你试图让多个视图控制器管理视图的不同部分,各种事情将会中断,例如在页面转换后转发屏幕旋转事件和调整视图大小/定位.

但是,如果您只需要支持iOS 5,答案是:

答案2 - 没问题!只需确保所有子页面视图控制器都正确连接到管理整个页面的主视图控制器.这意味着除了控制器的视图是公共父视图的子视图之外,控制器本身应该是公共父控制器的子控制器.只要控制器的parentViewController属性都设置正确,您就应该能够管理这种复合接口而不会有太多麻烦.

不幸的是,Apple仅为iOS5中的childViewControllers和parentViewControllers添加了公共setter.在iOS4及更早版本中,您仅限于Apple自己的容器控制器安排,无法创建自己的(至少,不是没有事件转发问题).

因此,假设您现在需要支持iOS4,答案3似乎是您最好的选择:使用多个视图构建您的界面,但只需一个控制器.这不是太糟糕了.您可以创建管理继承自己的子视图的自定义视图子类(例如,没有规则表明tableViewDataSource或委托必须是UIViewController子类,或者按钮IBAction必须是视图控制器上的方法而不是另一个视图).

您实际上会发现,您通常构建到视图控制器中的大多数功能都可以构建到"智能"容器视图中,从而允许您将屏幕拆分为多个独立的"控制器视图"来管理自己的内容.

唯一有点棘手的是做一些视图和下一个视图之间的转换.为此,您将无法使用标准的presentModalViewController或pushViewController方法,您必须使用CATransitions或UIView动画自行完成动画.


bry*_*mac 2

视图控制器编程指南很好地介绍了这一点。

\n\n

视图控制器管理一组视图。您可以拥有内容视图控制器和容器/导航视图控制器来管理视图控制器的层次结构(例如:导航视图控制器可以管理列表视图控制器和详细信息控制器)。

\n\n

这里有更详细的介绍:

\n\n

http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007457

\n\n
\n

视图控制器管理应用程序\xe2\x80\x99s\n 用户界面的离散部分。根据请求,它提供一个可以显示或交互的视图。通常,此视图是 iOS 中现有实现的更复杂的视图\xe2\x80\x94 按钮、开关和其他用户界面元素的根视图。视图控制器充当该视图层次结构的中央协调代理,处理视图与任何相关控制器或数据对象之间的交换。

\n\n

多个视图控制器协调它们的工作来呈现单个统一的用户界面。

\n
\n