使用 Storyboard 我们可以很方便地搭建好各种复杂的页面,同时通过 segue 连接可以轻松实现页面的跳转。
但除了segue,我们还可以使用纯代码的方式实现Storyboard界面的跳转。
但除了segue,我们还可以使用纯代码的方式实现Storyboard界面的跳转。
比如:使用 presentViewController() 方法将当前页面视图切换成新视图
本文介绍第三种方式:使用addChildViewController()将StoryBoard中的ViewController加载进来
比如下面的storyboard,左边一个是初始页面,点击上面的“加载”按钮,希望能把右边的logo页的视图加载进来。
我们可以通过 self.view.addSubview() 方法将另一个VC视图加载进来:
但运行后发现会发现个问题,图片错位了,也就是说logo页上定义的约束条件失效了。这是由于我们没将logo页对应的视图控制器添加进来。
所以除了用 addSubview() 方法把视图添加进来,还要用 addChildViewController() 方法将视图对应的视图控制器给加载进来。
下面是最终的代码:
运行后可以看到,页面显示正常了。
1 2 3 | let myNavigaiton = UIStoryboard (name: "Main" , bundle: nil ) .instantiateViewControllerWithIdentifier( "myNavigaiton" ) as ! UINavigationController self .presentViewController(myNavigaiton, animated: false , completion: nil ) |
如果有视图导航控制器的话,还可以使用 self.navigationControler.pushViewController 和 popViewController 来实现前进到下一个视图或回到上一个视图。
1 2 3 | var viewController = UIStoryboard (name: "Second" , bundle: nil ) .instantiateViewControllerWithIdentifier( "SecondView" ) as UIViewController self .navigationController?.pushViewController(viewController, animated: true ) |
本文介绍第三种方式:使用addChildViewController()将StoryBoard中的ViewController加载进来
比如下面的storyboard,左边一个是初始页面,点击上面的“加载”按钮,希望能把右边的logo页的视图加载进来。
![原文:Swift - 使用addSubview()方法将StoryBoard中的视图加载进来](http://www.hangge.com/blog_uploads/201605/2016050520252210728.png)
我们可以通过 self.view.addSubview() 方法将另一个VC视图加载进来:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import UIKit class ViewController : UIViewController { override func viewDidLoad() { super .viewDidLoad() } @IBAction func btnClick(sender: AnyObject ) { //从StoryBoard中获取视图控制器 let logoView = UIStoryboard (name: "Main" , bundle: nil ) .instantiateViewControllerWithIdentifier( "logoView" ) //添加获取到的视图控制器的视图 self .view.addSubview(logoView.view) } override func didReceiveMemoryWarning() { super .didReceiveMemoryWarning() } } |
![原文:Swift - 使用addSubview()方法将StoryBoard中的视图加载进来](http://www.hangge.com/blog_uploads/201605/2016050519320080516.png)
所以除了用 addSubview() 方法把视图添加进来,还要用 addChildViewController() 方法将视图对应的视图控制器给加载进来。
下面是最终的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import UIKit class ViewController : UIViewController { override func viewDidLoad() { super .viewDidLoad() } @IBAction func btnClick(sender: AnyObject ) { //从StoryBoard中获取视图控制器 let logoView = UIStoryboard (name: "Main" , bundle: nil ) .instantiateViewControllerWithIdentifier( "logoView" ) //添加获取到的视图控制器的视图 self .view.addSubview(logoView.view) //添加子视图控制器 addChildViewController(logoView) logoView.didMoveToParentViewController( self ) } override func didReceiveMemoryWarning() { super .didReceiveMemoryWarning() } } |
![原文:Swift - 使用addSubview()方法将StoryBoard中的视图加载进来](http://www.hangge.com/blog_uploads/201605/2016050519324069951.png)
源码下载:
hangge_1167.zip
![](http://www.hangge.com/blog/admin/include/edit/sysimage/icon16/zip.gif)
原文出自: www.hangge.com 转载请保留原文链接: http://www.hangge.com/blog/cache/detail_1167.html