如何切换 UIContainerView 中的子视图?

2016-04-16 05:50:05 +08:00
 shippo7

我在 MainViewController 中有一个 UIContainerView 已经加载 aViewController ,我想在 aViewController 中点击一个按钮后, UIContainerView 显示 bViewController 。

已经有如下代码: MainViewController.swift:

func showContentController( content: UIViewController ) {
    addChildViewController( content )
    content.view.frame = containerView.frame;
    view.addSubview( content.view )
    content.didMoveToParentViewController(self)
}

func hideContentController( content: UIViewController ) {
    content.willMoveToParentViewController(nil)
    content.view.removeFromSuperview()
    content.removeFromParentViewController()
}

aViewController.swift:

@IBAction func pushButton(sender: UIButton) {
    OffersMainViewController().hideContentController(self)
    let storyboard = UIStoryboard(name: "StoryboardID", bundle: nil)
    var vc: UIViewController = storyboard.instantiateViewControllerWithIdentifier("bViewController") as UIViewController
    OffersMainViewController().showContentController(vc)
}

这是点击按钮会报错, containerView.frame 的值为 nil

我应该如何实现想要的功能呢?

3184 次点击
所在节点    iDev
8 条回复
shippo7
2016-04-16 06:33:08 +08:00
是不是 vc 之间要写 delegate ,不能直接这样调用?
shippo7
2016-04-16 08:01:14 +08:00
就是要写 delegate ,都散了吧
kobe1941
2016-04-16 09:18:47 +08:00
swift 不清楚, OC 里边有个这样的方法:
- (void)transitionFromViewController:(UIViewController *)fromViewController toViewController:(UIViewController *)toViewController duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^ __nullable)(void))animations completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(5_0);
free9fw
2016-04-16 10:56:21 +08:00
frame 重新设置一下
shippo7
2016-04-16 11:55:52 +08:00
@free9fw

我试过手动设置 frame 也是没用的,因为直接用 MainViewController().function 这样不会回到原来的 MainViewController 中,而是生成了一个新的 MainViewController()类,其中的任何组件都没有在视图上初始化,所以 frame 是空的

用正常的方法,两个 View Controller 之间只能通过 delegate 传值
CommandZi
2016-04-16 17:01:16 +08:00
CommandZi
2016-04-16 17:01:35 +08:00
free9fw
2016-04-16 18:09:27 +08:00
@shippo7 或者直接自定义转场

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/271478

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX