酷课堂(ID:coolketang)独家文章,其他媒体转载请注明出处。 这是《iOS移动开发从入门到精通》在“酷课堂”连载的第40篇文章,每周二更新,欢迎大家留言交流。 加小课好友:coolketang001 获取最新课程信息、每日交流群问答分享...更多功能等你来解锁。 初次写书,难免会有不足的地方,希望大家可以多多批评指正,感谢!个人邮箱:[email protected] 纸质书现已在京东、当当、亚马逊等各大书城上市, 搜索“清华大学 李发展”即可找到。 6.1.3以模态方式弹出视图控制器 在iOS开发中,您会经常遇到以模态方式显示的视图控制器,如UIImagePickerController。当以模态方式打开UIImagePickerController时,用户在新打开的页面中选择所需的图片,然后再通过dismiss方法关闭弹出的UIImagePickerController。 使用模态方式展示视图控制器,主要用于以下两个场合: v 收集用户输入的数据:比如用户点击区域按钮,以模态的方式显示省、市区域列表,使用户在新的页面进行省、市的选择; v 显示临时信息:比如用户点击注册协议按钮,以模态的方式临时显示用户协议内容; 这里我们将创建了一个新的视图控制器,并以模态的方式显示新的视图控制器,同时向新的视图控制器中传递数据。 首先使用6-1-2中的方法,创建一个基于[Single View Application]模板的项目,同时创建一个新的视图控制器类,项目创建完成后,效果如图6-1-15所示:
图6-1-15 修改初始视图控制器 接着在ViewController.swift中,添加一个按钮,当用户点击按钮时,以模态的方式弹出另一个视图控制器,同时向该视图控制器中传入参数: 1import UIKit 2 3class ViewController:UIViewController { 4 5var label:UILabel! 6 7override func viewDidLoad() { 8super.viewDidLoad() 9self.view.backgroundColor =UIColor.brown() 10label = UILabel(frame: CGRect(x: 40, y:100, width: 240, height: 44)) 11label.text = "" 12self.view.addSubview(label) 13 14let button = UIButton(frame: CGRect(x:40, y: 180, width: 240, height: 44)) 15button.setTitle("打开新的视图控制器", for: UIControlState()) 16button.backgroundColor =UIColor.black() 17button.addTarget(self, action:#selector(ViewController.openViewController), for: .touchUpInside) 18self.view.addSubview(button) 19} 20 21func openViewController() 22{ 23let newViewController =NewViewController() 24newViewController.labelTxt = "传递的参数!" 25newViewController.viewController = self 26self.present(newViewController,animated: true, completion: nil) 27} 28} 在第5行的代码中,给视图控制器类添加了一个UILabel标签属性,该标签用来显示从模态窗口中返回的数据。 在第9至12行的代码中,首先设置当前视图控制器根视图的背景颜色为棕色,然后对label属性进行初始化操作,设置label的默认文字为无,并将标签添加到根视图中。 接着在第14至18行的代码中,创建了一个UIButton按钮对象,同时设置按钮的标签文字和背景颜色。在第17行代码中,给按钮绑定了点击事件,当用户点击该按钮时,将调用相应的方法,在该方法中打开相应的视图控制器。 最后在第21至26行的代码中,创建了一个名为openViewController的方法,用来响应按钮的点击事件。首先在第23行的代码中,创建了一个NewViewController的实例。然后在第24行代码中,设置实例的labelTxt字符串属性的值。在第25行代码中,设置viewController属性为当前的视图控制器,该属性将被用来从模态视图控制器,向当前的视图控制器中返回数据。 在第26行的代码中,调用当前视图控制器实例的present(newViewController:, animated:, completion:)方法,以模态的方式显示新的视图控制器。该方法的第一个参数,表示需要打开的视图控制器实例,第二个参数表示是否以动画的方式打开视图控制器,第三个参数表示视图控制器被打开后的回调方法。 修改新的视图控制器 接着修改NewViewController.swift文件,您将在该类中添加一个标签对象的属性,用来显示从前一个视图控制器传递进来的数据。还需要添加一个按钮对象,当用户点击该按钮时,退出当前的视图控制器,并返回原来的视图控制器,同时向原来的视图控制器返回数据: 1import UIKit 2 3class NewViewController:UIViewController { 4 5var viewController : ViewController? 6var labelTxt = "" 7override func viewDidLoad() { 8super.viewDidLoad() 9self.view.backgroundColor =UIColor.purple() 10let label = UILabel(frame: CGRect(x:40, y: 100, width: 240, height: 44)) 11label.text = labelTxt 12self.view.addSubview(label) 13 14let button = UIButton(frame: CGRect(x:40, y: 180, width: 240, height: 44)) 15button.setTitle("关闭", for: UIControlState()) 16button.backgroundColor =UIColor.black() 17button.addTarget(self, action:#selector(NewViewController.dismissSelf), for: .touchUpInside) 18self.view.addSubview(button) 19} 20 21func dismissSelf() 22{ 23viewController?.label.text = "返回的参数。" 24self.dismiss(animated: true,completion: nil) 25} 26} 首先在第5至6行代码中,给NewViewController类添加了两个属性,一个是viewController属性,用来表示弹出当前视图控制器的源视图控制器。另一个字符串属性labelTxt,表示从源视图控制器中传进来的数据。 接着在第9至12行代码中,依次设置了当前视图控制器根视图的背景颜色为紫色,并创建了一个UILabel标签对象,用来显示从源视图控制器传递进来的数据labelTxt的内容。 然后在第14至18行的代码中,创建了一个UIButton对象,并设置按钮上标签的文字内容为关闭,背景颜色为黑色。同时在第17行代码中,给按钮绑定了点击事件,当用户点击按钮时,将退出当前的视图控制器,并返回源视图控制器。
最后在第21至25行的代码中,创建了一个名为dismissSelf的方法。在该方法中,首先设置了源视图控制器中的标签对象的文字内容,然后调用视图控制器对象的dismiss(animated:, completion:)方法,退出当前的视图控制器,并返回源视图控制器。该方法的第一个参数,表示是否以动画的方式,退出视图控制器,第二个参数则表示视图控制器退出完毕后的回调方法。 代码编写完成后,点击[编译并运行]按钮,打开模拟器运行项目,效果如图6-1-16所示。在打开的模拟器中,点击[打开新的视图控制器]按钮,新的视图控制器将从底部滑入,滑入后的状态如图6-1-17所示。并且在[关闭]按钮上方的标签中,显示了从源视图控制器传入的数据。 接着点击[关闭]按钮,新的视图控制器将从上往下滑出,并返回源视图控制器,同时将源视图控制器中的标签对象的文字内容设置为[返回的参数],如图6-1-18所示: 图6-1-16 图6-1-17 图6-1-18 新课程发布: 《iOS开发中的神兵利器》已经在网易云课堂上线,点击“阅读原文”即可观看。 本套视频教程总140节,主要讲解github中近百个过千star的iOS热门开源项目,以及其它进阶内容。 这是市面上唯一大规模讲解github中热门的iOS开发开源项目的教材。 学会这些开源项目,可以快速、优雅地解决现实工作中遇到的一些棘手的开发问题。 付费学员专享福利: (额外福利,不承诺永久提供!) 1.为了更好的交流,近期我们开设了QQ群 2.已购买课程的同学,请添加小课微信号:coolketang001 3.截图订单号,即可获取对应QQ群号,及免费练习源码。 加小课:coolketang001,获取最新课程信息、每日交流群问答分享...更多功能等你来解锁。 想开发自己的APP? 想及时获得解答? 想接触更多技术大牛? 扫码关注我们就对了! 埋头自学是不行的,你需要同学和老师! 如果觉得文章对你有帮助,请转发分享,谢谢你! |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|