【iOS7的一些总结】3、视图控制器ViewControllers之间的数据传递(2)
来源:互联网 发布:淘宝号申请注册 编辑:程序博客网 时间:2024/06/08 10:23
上文中记录了在手写代码实现UI的情况下,界面切换时不同视图控制器之间数据传递的机制。显示和消除界面使用的函数时presentViewController和dismissViewController函数,数据传递则可以采用代理、通知等机制。本文记录的是使用storyboard实现界面的情况下,采用segue相关的方法实现与上文中相同的功能。
首先要做的是新建一个单视图工程,建立完成后会生成一组(一个头文件和一个源文件称为一组)AppDelegate类,一组ViewController类,一个storyboard以及其他一些辅助文件。然后需要新建一个视图控制器类,使用快捷键command+N,选择Objective-C类,新建一组名为FirstSubViewController的视图控制器继承自UIViewController。
下面在storyboard中添加各种控件。按照之前的设计,将一个Label和一个Button加入到第一个sence中。然后,在storyboard中拖入一个新的视图控制器,在其中加入一个TextField和一个Button。同时别忘了给控件添加IBOutlet和IBAction,以及将第二个界面的ViewController类改为我们之前新建好的FirstSubViewController类。
在不同的界面之间建立segue非常简单,只需要在触发控件(比如Button)上按住Ctrl并拖动至新的界面,并在弹出菜单中选择Modal选项。在Attribute菜单中为segue添加一个ID,然后用类似的方法将第二个ViewController的按钮segue到第一个界面上。
然后一个在两个界面之间的segue就已经建立完成,如下图所示。
此时运行一下程序将会发现,从第一个界面中点击“显示下一界面按钮”,将会跳转到第二个界面中;点击“返回上一界面”,将会跳回最初的界面。
然后实现让第一个界面中的Label获取第二个界面中TextField中的内容,实现方法很简单,即在第二个界面的视图控制器中实现prepareForSegue函数即可。
在ViewController.h中添加一个property,用于接收传过来的字符:
@property (nonatomic,copy) NSString *stringToReceive;
需要注意的是,不要试图将UILabel类型的IBOutlet声明为公开属性用于接收字符串,因为在下面的prepareForSegue的方法中,不能直接获取到有效的Label实例。
然后再viewDidLoad函数中判断该属性是否为空,不为空则赋给标签:- (void)viewDidLoad{ [super viewDidLoad];// Do any additional setup after loading the view, typically from a nib. if (_stringToReceive != Nil) { _showText.text = _stringToReceive; }}
在firstSubViewController中实现函数:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ if ([segue.identifier isEqualToString:@"goBackToPreviousViewController"]) { if ([segue.destinationViewController isKindOfClass:[ViewController class]]) { ViewController *vc = (ViewController *)segue.destinationViewController; vc.stringToReceive = _inputText.text; } }}这里面“goBackToPreviousViewController”是自己定义的segue ID。
自此,整个工程就已经完成了,运行测试一下发现一切正常。
本文和上文的两个demo已经上传到了资源页,需要的话可以下载作为参考。
- 【iOS7的一些总结】3、视图控制器ViewControllers之间的数据传递(2)
- 【iOS7的一些总结】2、视图控制器ViewControllers之间的数据传递(1)
- 视图控制器ViewControllers之间的数据传递
- 控制器和视图之间传递数据的几种方式
- 【iOS7的一些总结】10、用列表显示内容(下)列表视图控制器UITableViewController
- 一、总结几种关于ViewControllers之间传值的方式(从父视图向子视图传值)
- 二、总结几种关于ViewControllers之间传值的方式(从子视图向父视图传值)
- UI - 视图控制器之间的值传递
- 控制器向视图传递数据的3种方式
- 两个控制器之间的数据传递 (MVC)
- (iOS)控制器之间数据的传递
- iOS控制器之间数据的双向传递
- MVC:控制器与视图之间的值传递
- 视图之间的数据传递 ios
- 视图之间的数据传递 ios
- iOS7 interactive transitions(视图控制器的过渡动画 )
- iOS学习笔记(7)视图控制器之间传递参数的三种方式
- 控制器之间的数据传递——storyboard中控制器的数据传递
- 开发者需知的10类工具
- c++builder 2010 with OpenSSL
- winsock入门之建立socket
- 用Node.js实现Restful风格webservice
- (转载优质文)定制iOS 7中的导航栏和状态栏
- 【iOS7的一些总结】3、视图控制器ViewControllers之间的数据传递(2)
- Iterable接口
- 1_04感想
- 人品问题
- 妹子尚且如此! 少年努力吧
- EL 表达式学习中的 几个注意点。
- Ubuntu 12.10代理服务器上网设置
- 文件操作 fopen fclose
- 黑马程序员_IO流基础