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

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

但除了segue,我们还可以使用纯代码的方式实现Storyboard界面的跳转。 
比如:使用 presentViewController() 方法将当前页面视图切换成新视图
1
2
3
let myNavigaiton = UIStoryboard(name: "Main", bundle: nil)
        .instantiateViewControllerWithIdentifier("myNavigaiton"asUINavigationController
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中的视图加载进来

我们可以通过 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 ViewControllerUIViewController {
     
    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中的视图加载进来

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

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

http://lihuaxi.xjx100.cn/news/235517.html

相关文章

Redis5.0之Stream案例应用解读

2019独角兽企业重金招聘Python工程师标准>>> 非常高兴有机会和大家在这里交流Redis5.0之Stream应用。今天的分享更多的是一个抛砖引玉,欢迎大家提出更多关于Redis的思考。 首先,我们来个假设,这里有个杯子,这个杯子是去…

Swift:闭包

[objc] view plaincopy print?/* 闭包(Closures) * 闭包是自包含的功能代码块,可以在代码中使用或者用来作为参数传值。 * 在Swift中的闭包与C、OC中的blocks和其它编程语言(如Python)中的lambdas类似。 * 闭包…

html5小游戏Untangle

2019独角兽企业重金招聘Python工程师标准>>> 今天介绍一个HTML5的小游戏,让大家体验到HTML5带来的乐趣。这个小游戏很简单,只要用鼠标拖动 蓝点,让图上的所有线都不相交,游戏时间就会停止,是动用大家头脑的…

Centos-Mysql配置my.cnf内容

#v1.0 [mysqld] #通用 #skip-grant-tables 跳过授权密码登录 port3306 #使用mysql系统账号操作进程 usermysql socket/var/lib/mysql/mysql.sock #basedir/usr datadir/var/lib/mysql #mysql错误日志 log_error /tmp/ch_mysql_log/error.log #mysql所有操作日志 生产服务器不…

jQuery 加法计算 使用+号即强转类型

1 var value1 $("#txt1").val(); 2 var value2 $("#txt2").val(); 3 //数值前添加号 number加号和数值加号需要用空格隔开 即实现加法运算 4 $("#txt3").val(value1 value2); 转载于:https://www.cnblogs.com/xiemin-minmin/p/11026784.…

所有接口添加plist文件的写法 swift

第一步 建立plist文件 interface JMTConfigUtils : NSObject /** * 获取配置文件中友盟key * * return NSString */ - (NSString *)umengKey; /** * 微信AppId * * return NSString */ - (NSString *)wxAppId; /** * 微信appSecret * * return NSString */ - (NSString…

拥有2000家门店,他如何晋升为服装界的新宠?

—— iwarm3.0加热组件、碳纳米管膜炎、管状石墨结构体...你看到并不是一款高科技电子产品,这是快鱼服饰在这个冬天推出的黑科技产品 - 智能温控羽绒服。 在竞争激烈的服装行业,快鱼(Fast Fish)将“快时尚”的理念推广至全国&…

ARM 寄存器 和 工作模式了解

一. ARM 工作模式 1. ARM7,ARM9,ARM11,处理器有 7 种工作模式;Cortex-A 多了一个监视模式(Monitor) 2. 用户模式:非特权模式,大部分任务执行在这种模式,它运行在操作系…