【问题标题】:Adding a child viewcontroller添加子视图控制器
【发布时间】:2014-06-09 18:57:31
【问题描述】:

我有 2 个视图,ParentViewControllerChildViewController;我想将ChildViewController 嵌套在ParentViewController 中。我在 Storyboard 中设计了ParentViewControllerChildViewControllerParentViewController.m 包含父逻辑,ChildViewController.m 包含子逻辑。在ParentViewController.m 我这样添加孩子:

 ChildViewController *childVC = [self.storyboard instantiateViewControllerWithIdentifier:@"ChildSBI"];
 [self addChildViewController:childVC];

我的问题:如何在 ParentViewController 中定位 childVC(即设置它的原点)。

似乎我想做如下的事情:

  1. 分配初始化子项
  2. 在子视图上调用 (void)addSubview:(UIView *)view

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

    如何在 ParentViewController 中定位 childVC(即设置它的原点)。

    请记住,视图控制器没有来源——只有它的视图有。要使视图控制器的内容出现在屏幕上,您需要一个视图来绘制它。您可以让一个视图控制器的视图出现在另一个视图控制器的视图层次结构中,并且使用情节提要非常容易。

    要在情节提要中的视图控制器之间设置父/子关系,请执行以下操作:

    • 将容器视图添加到父视图控制器的视图层次结构中。

    • 将“嵌入”segue 从该容器视图拖到子视图控制器。

    • 您可以使用通常的-prepareForSegue:sender: 方法让父控制器将数据传递给子控制器。

    如果您愿意,您还可以通过编程方式进行设置,并且您拥有的代码是一个好的开始:

    ChildViewController *childVC = [self.storyboard instantiateViewControllerWithIdentifier:@"ChildSBI"];
    [self addChildViewController:childVC];
    

    之后,您的父视图控制器应设置子视图的位置并将其添加到父视图,如下所示:

    UIView *childView = childVC.view;
    childView.frame = CGRectMake(150, 300, 100, 100); //use whatever coordinates you want
    [self.view addSubview:childView];
    

    Creating Custom Container Controllers 中有更多详细信息,但您的问题的基本答案是容器控制器应设置包含控制器视图的大小和位置。

    【讨论】:

    • 感谢您的提示。那么在父实例化时会自动调用 prepareForSegue 吗?我正计划在 viewDidLoad 中调用 addChildViewController,因为子视图将始终存在
    • @Apollo 是的,如果你使用 embed segue,子视图控制器将被实例化,当父控制器加载它的视图时,-prepareForSegue:sender: 将被调用。
    • 啊。感谢您提供非常详细的答案和更新的程序化解决方案。对我的朋友很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多