Swift - 使用addSubview()方法将StoryBoard中的视图加载进来

使用  Storyboard 我们可以很方便地搭建好各种复杂的页面,同时通过  segue 连接可以轻松实现页面的跳转。

但除了segue,我们还可以使用纯代码的方式实现Storyboard界面的跳转。 
 
比如:使用  presentViewController() 方法将当前页面视图切换成新视图
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中的视图加载进来_第1张图片

我们可以通过  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()
     }
}
但运行后发现会发现个问题,图片错位了,也就是说logo页上定义的约束条件失效了。这是由于我们没将logo页对应的视图控制器添加进来。
Swift - 使用addSubview()方法将StoryBoard中的视图加载进来_第2张图片

所以除了用  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中的视图加载进来_第3张图片
源码下载: hangge_1167.zip

原文出自: www.hangge.com   转载请保留原文链接: http://www.hangge.com/blog/cache/detail_1167.html

你可能感兴趣的:(swift,-,使用addSubview)