【问题标题】:iOS Nested View Controllers view inside UIViewController's view?UIViewController 视图中的 iOS 嵌套视图控制器视图?
【发布时间】:2013-07-04 04:15:02
【问题描述】:

在 iOS 中,在 UIViewController 的视图中有一个嵌套的视图控制器的视图通常是不好的编程习惯吗?比如说我想要某种交互元素来响应用户的触摸,但只占据屏幕的 25%。

我想我会这样说:

[self.view addSubview: nestedViewController.view];

【问题讨论】:

标签: ios uiviewcontroller viewcontroller


【解决方案1】:

我把这段代码放在父视图控制器中。它对我很有用。

对象 C

-(void)viewDidLoad{
     [super viewDidLoad];
     InnerViewController *innerViewController = [self.storyboard instantiateViewControllerWithIdentifier:INNER_VIEW_CONTROLLER];
     [self addChildViewController:innerViewController];
     [self.view addSubview:innerViewController.view];
     [innerViewController didMoveToParentViewController:self];
}

斯威夫特

 let childViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ChildViewController"),
 self.addChildViewController(childViewController)
 self.view.addSubview(childViewController.view)
 childViewController.didMove(toParentViewController: self)

另一种选择是使用 IB 并放置容器视图。 UIViewController 将自动显示(在本例中为 XCode 9):

【讨论】:

  • 是的! +1。感谢您提供有关如何以编程方式执行此操作的答案:)
  • 我刚刚将视图从子视图控制器拖放到父子视图的列表中。
【解决方案2】:

这是我基于 Swift Developers On FB 的回答的 Swift 3 解决方案

 let childViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ChildPageViewController"),
 self.addChildViewController(childViewController)
 self.view.addSubview(childViewController.view)
 childViewController.didMove(toParentViewController: self)

【讨论】:

    【解决方案3】:

    不,这通常是好的设计,它有助于保持视图控制器简洁。但是,您应该使用视图控制器包含模式,请查看以下文档。

    Implementing a Container View Controller

    使用带有 Storyboard 的 Interface Builder 进行设置也非常简单,请查看对象库中的 Container View。

    这是一个故事板中的人为示例。在此示例中,您将有 4 个视图控制器,一个包含 3 个容器,一个用于每个容器。当您呈现包含所有容器的最左侧控制器时,Storyboard 将自动初始化并嵌入其他 3 个。您可以通过 childViewControllers 属性访问这些子视图控制器,或者有一种方法可以覆盖 prepareForSegue:sender: 和捕获即将被调用的 segue 的目标视图控制器。如果需要,这也是将属性传递给子视图控制器的好方法。

    【讨论】:

    • 你是如何在故事板中做到这一点的?!这是一个基本问题.. 我不知道答案:) 叹息——回答我自己的问题。在场景中添加一个容器。塑造它。然后在情节提要的空白字段上制作一个 UIViewController。然后右键单击并从该容器(在导航器列表或 GUI 中)拖动到新的 UIViewController。从弹出窗口中,选择 viewDidLoad-embed,开始。谢谢克里斯! :)
    • 顺便说一句,链接坏了。
    • @JoeBlow +1 "viewDidLoad-embed" 圣牛:谁能猜到!
    • 感谢@ChrisWagner!这是实现 MVVM 架构和避免大规模视图控制器/“MVC”的难题的关键部分;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多