• StoryBoard学习(5):使用segue页面间传递数据


    StoryBoard学习(5):使用segue页面间传递数据

    函数:

    C代码  收藏代码
    1. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender  

    具体例子:

    1.首先创建1个Single View模版项目,然后在MainStoryboard中添加1个新的ViewContronller。并在2个View Controller中添加标签、按钮、编辑输入框。

    2. 将第1页和第2页建立segue。

    选中第1页中的按钮[跳到第2页],鼠标右键(或按住Controll键,鼠标左键)拖拽到第2页后,放手,在弹出菜单上选择[modal]

    3. 将第1页中的编辑输入框组件与class文件挂钩。

    单独窗口打开MainStoryboard和ViewController.h文件,然后鼠标右键拖拽编辑输入框到.h文件中的@interface的下一行。

    注意,编辑输入框组件的name属性这里设置为 page1Data

    4.在ViewController.m中添加如下代码。

    在@implementation之后添加:

    C代码  收藏代码
    1. @synthesize page1Data;  

    重载prepareForSegue方法:

    C代码  收藏代码
    1. -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{  
    2.     NSString* data = page1Data.text;  
    3.     UIViewController* view = segue.destinationViewController;  
    4.     if ([view respondsToSelector:@selector(setParam:)]) {  
    5.         [view setValue:data forKey:@"param"];  
    6.     }  
    7. }  

    注意:其中的setParam和param会和下面的代码进行关联!!

    5.添加新类文件并绑定给第2页。


    注意:Class名为 SecondViewController


    将类SecondViewController绑定到第2页.

    6.将第2页中的编辑输入框组件绑定到类SecondViewController中。

    单独窗口打开SecondViewController.h和MainStoryboard,然后选中第2页中的编辑输入框,然后鼠标右键拖拽编辑输入框到SecondViewController.h文件中的@interface的下一行。

    注意:绑定时编辑输入框组件的name属性设置为 page2Data。

    7.修改SecondViewController的.h和.m文件。

    7.1 修改SecondViewController.h

    @interface SecondViewController : UIViewController之后添加:

    C代码  收藏代码
    1. @property (strong, nonatomic) NSString *param;  

    注意:这里定义的参数 param 必须和前面ViewController.m中的prepareForSegue方法中的param相同!!!

    7.2 修改SecondViewController.m

    在@implementation SecondViewController之后添加:

    C代码  收藏代码
    1. @synthesize param;  
    2. @synthesize page2Data;  

     修改方法viewDidLoad:

    C代码  收藏代码
    1. - (void)viewDidLoad  
    2. {  
    3.     [super viewDidLoad];  
    4.     // Do any additional setup after loading the view.  
    5.     page2Data.text=param;  
    6. }  

     

    编译运行,当在第1页中输入参数,跳到第2页后可以显示第1页中输入的参数。


    8. 给第2页中的按钮[关闭窗口]添加事件。

    单独窗口打开SecondViewController.h和MainStoryboard,然后选中第2页中的按钮[关闭窗口],右键拖拽到SecondViewController.h中@interface SecondViewController : UIViewController之后;

    在弹出窗口的Connection属性选择Action,Name属性设置为closeWin。然后点按钮[Connect]。

    可以看到,在SecondViewController.h中增加了如下代码:

    C代码  
    1. - (IBAction)closeWin:(id)sender;  

    在SecondViewController.m中增加了如下代码:

    C代码  
    1. - (IBAction)closeWin:(id)sender {  
    2. }  

    修改 SecondViewController.m中的closeWin方法,具体代码如下:

    C代码  收藏代码
    1. - (IBAction)closeWin:(id)sender {  
    2.     [self dismissViewControllerAnimated:YES completion:nil];  
    3. }  

     

    编译运行,当显示第2页后,点击[关闭窗口]按钮,即可关闭第2页,重新显示第1页。

    接下来,要实现在第2页修改接收到的参数,然后将修改后的参数返回给第1页。

    9. 修改 ViewController.h和.m文件内容。

     9.1 ViewController.h

    在 @interface ViewController : UIViewController 之后添加:

    C代码  收藏代码
    1. @property (strong,nonatomic) NSString* editData;  

    注意:定义的变量 editData 是用来接收 第2页编辑输入框的内容,在 SecondViewController.m会用到!!! 

    9.2 ViewController.m

    在 @implementation ViewController 之后添加:

    C代码  收藏代码
    1. @synthesize editData;  

     

    修改方法 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

    C代码  收藏代码
    1. -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{  
    2.     NSString* data = page1Data.text;  
    3.     UIViewController* view = segue.destinationViewController;  
    4.     if ([view respondsToSelector:@selector(setParam:)]) {  
    5.         [view setValue:data forKey:@"param"];  
    6.     }  
    7.       
    8.     if ([view respondsToSelector:@selector(setFirstViewController:)]) {  
    9.         [view setValue:self forKey:@"firstViewController"];  
    10.     }  
    11. }  

    注意:其中的 setFirstViewController 和 firstViewController 在下面的 SecondViewController.h和.m中会定义!!!

    重载方法 -(void)viewWillAppear:(BOOL)animated :

    C代码  收藏代码
    1. -(void)viewWillAppear:(BOOL)animated{  
    2.     NSLog(@"viewWillAppear");  
    3.     [super viewWillAppear:animated];  
    4.     page1Data.text=editData;  
    5. }  

     

    10. 修改 SecondViewController.h和.m文件内容。

    10.1 SecondViewController.h

    在 @interface SecondViewController : UIViewController 之后添加:

    C代码  收藏代码
    1. @property (strong,nonatomic) id firstViewController;  

    注意:变量名称 firstViewController必须和上面ViewController.m中相同!!!

    10.2 SecondViewController.m

    在  @implementation SecondViewController 之后添加:

    C代码  收藏代码
    1. @synthesize firstViewController;  

     

    重载方法 -(void)viewWillDisappear:(BOOL)animated

    C代码  收藏代码
    1. -(void)viewWillDisappear:(BOOL)animated{  
    2.     [super viewWillDisappear:animated];  
    3.       
    4.     if ([firstViewController respondsToSelector:@selector(setEditData:)]) {  
    5.         [page2Data endEditing:YES];  
    6.         [firstViewController setValue:page2Data.text forKey:@"editData"];  
    7.     }  
    8. }  

    注意:其中的  setEditData 和  editData 必须和上面 ViewController.h和.m中定义的相同!!!

    OK,编译运行。第1页的输入文字会传递到第2页的输入框中,第2页的输入框文字在关闭窗口后同样会传递给第1页的输入框中。

     原文:http://stephen830.iteye.com/blog/1696614

  • 相关阅读:
    spring boot多数据源配置(mysql,redis,mongodb)实战
    迷你MVVM框架 avalonjs 学习教程3、绑定属性与扫描机制
    迷你MVVM框架 avalonjs 学习教程2、模块化、ViewModel、作用域
    迷你MVVM框架 avalonjs 学习教程1、引入avalon
    chrome36可以使用自定义元素的回调了
    VML元素的相关资料
    不使用Math.random实现随机数。
    迷你MVVM框架 avalonjs 1.3.4发布
    iscroll源码学习(1)
    对avalon的类名操作进行升级
  • 原文地址:https://www.cnblogs.com/langtianya/p/4003761.html
Copyright © 2020-2023  润新知