zoukankan      html  css  js  c++  java
  • 【转】使用segue页面间传递数据

    函数:

    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之后添加:

    1. @synthesize page1Data;  

    重载prepareForSegue方法:

    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之后添加:

    1. @property (strong, nonatomic) NSString *param;  

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

    7.2 修改SecondViewController.m

    在@implementation SecondViewController之后添加:

    1. @synthesize param;  
    2. @synthesize page2Data;  

     修改方法viewDidLoad:

    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中增加了如下代码:

    1. - (IBAction)closeWin:(id)sender;  

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

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

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

    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 之后添加:

    1. @property (strong,nonatomic) NSString* editData;  

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

    9.2 ViewController.m

    在 @implementation ViewController 之后添加:

    1. @synthesize editData;  

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

    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 :

    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 之后添加:

    1. @property (strong,nonatomic) id firstViewController;  

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

    10.2 SecondViewController.m

    在  @implementation SecondViewController 之后添加:

    1. @synthesize firstViewController;  

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

    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

     
  • 相关阅读:
    June. 26th 2018, Week 26th. Tuesday
    June. 25th 2018, Week 26th. Monday
    June. 24th 2018, Week 26th. Sunday
    June. 23rd 2018, Week 25th. Saturday
    June. 22 2018, Week 25th. Friday
    June. 21 2018, Week 25th. Thursday
    June. 20 2018, Week 25th. Wednesday
    【2018.10.11 C与C++基础】C Preprocessor的功能及缺陷(草稿)
    June.19 2018, Week 25th Tuesday
    June 18. 2018, Week 25th. Monday
  • 原文地址:https://www.cnblogs.com/saurik/p/4813111.html
Copyright © 2011-2022 走看看