【问题标题】:Loading a View Controller inside a View In Xcode在 Xcode 中的视图中加载视图控制器
【发布时间】:2015-06-19 07:29:46
【问题描述】:

我目前正在 iPad 上开发一个应用程序。该应用程序仅包含两个视图,但每个视图都包含许多按钮和标签。目前,两个视图的布局都设置好了。每个都设置在视图控制器中。我还有另一个视图控制器,它包含顶部的主菜单和一个大容器(UIView),我希望它能够容纳我提到的两个视图。

我的问题是,有没有办法在视图中显示视图控制器?当我单击主菜单中的一个按钮时,我想在该容器(UIView)中显示一个视图控制器,并在我单击另一个按钮时显示另一个。如果我的计划不可行,请提出一些建议以使同样的事情发挥作用。

非常感谢!

【问题讨论】:

    标签: ios user-interface


    【解决方案1】:

    是的,您可以通过添加UIViewController view 来轻松做到这一点,如下所示..

    _viewController=[self.storyboard instantiateViewControllerWithIdentifier:@"ViewController"];
    [self.view addSubview:viewController.view];
    

    只要您在ViewController 中添加viewController.view,您的viewDidLoad 方法就会被调用。

    更新:根据UIViewController Class Reference,在将 UIViewController 添加为另一个 ViewController 中的子视图时,您需要再添加两个步骤。

    [self addChildViewController:viewcontroller];
    [self.view addSubview:viewController.view];
    [viewcontroller didMoveToParentViewController:self];
    

    以上回答完毕。

    希望这会有所帮助。 干杯。

    【讨论】:

    • 好的,一个后续问题。如果我想更改子视图中的视图控制器怎么办。我需要删除以前的并添加另一个新的吗?
    • @EpicNinja 我没有收到您的问题,您是在问是否要对已添加的视图控制器进行任何更改?是这样,您不需要再次添加它,您可以为特定任务创建函数并使用您肯定拥有的 viewcontroller 对象调用它。
    • 嗯,我的意思是每次我想切换到容器下的不同视图时,我都会将其添加为子视图?不需要删除我之前添加的视图,?
    • 是的,不需要删除,你可以隐藏。
    • 是的,不要忘记在添加为子视图之前和之后添加[self addChildViewController:viewcontroller];[viewcontroller didMoveToParentViewController:self];,我错过了这一点。
    【解决方案2】:

    Custom Container View Controllers 正是您所需要的。如果您使用 Interface Builder 和 storyboards - 找到一个容器视图,将它拖到您的视图中并将包含的类设置为您的视图控制器。

    如果您不使用情节提要或 IB(我鼓励您这样做) - 请按照上面的链接并实施将子视图控制器添加到您的视图控制器。 永远不要在没有之前的 addChildViewController: 调用的情况下添加子视图,这可能会导致意外结果。通常,添加子视图控制器应按以下顺序:

    1. 致电[self addChildViewController:childvc]
    2. 将孩子的 VC 视图添加为子视图 [self.view addSubview:childvc.view]
    3. 致电[childvc didMoveToParentViewController:self]

    在这种情况下,一切都会正常工作。

    【讨论】:

    • 谢谢@世嘉零。我会试试这个。 :)
    • 有什么办法可以防止每次加载视图吗?我在容器视图中有 4 个控制器作为子视图控制器,但每次我更改选项卡时,它都会从头开始加载控制器。最初我只想加载一次视图。
    • 在这种情况下,带有隐藏标签栏的 UITabBarController 可能会更好?
    猜你喜欢
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多