读书人

StoryBoard学习(五):使用segue页面

发布时间: 2012-11-04 10:42:42 作者: rapoo

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

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

?

?

函数:

?

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
?

具体例子:

?

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

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

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

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

?

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

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

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

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

?

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

?

在@implementation之后添加:

?

?

@synthesize page1Data;
?

重载prepareForSegue方法:

?

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{    NSString* data = page1Data.text;    UIViewController* view = segue.destinationViewController;    if ([view respondsToSelector:@selector(setParam:)]) {        [view setValue:data forKey:@"param"];    }}

?

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

?

?

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

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


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

注意:Class名为 SecondViewController


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

将类SecondViewController绑定到第2页.

?

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

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

?

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

?

?

7.修改SecondViewController的.h和.m文件g">

?

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

?

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方法,具体代码如下:

?

?

- (IBAction)closeWin:(id)sender {    [self dismissViewControllerAnimated:YES completion:nil];}
?

?

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

?

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

?

?

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

?

?9.1 ViewController.h

在?@interface ViewController : UIViewController?之后添加:

?

@property (strong,nonatomic) NSString* editData;

?

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

?

?

9.2 ViewController.m

在?@implementation ViewController?之后添加:

?

@synthesize editData;
?

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

?

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{    NSString* data = page1Data.text;    UIViewController* view = segue.destinationViewController;    if ([view respondsToSelector:@selector(setParam:)]) {        [view setValue:data forKey:@"param"];    }        if ([view respondsToSelector:@selector(setFirstViewController:)]) {        [view setValue:self forKey:@"firstViewController"];    }}

?

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

?

?

?

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

?

-(void)viewWillAppear:(BOOL)animated{    NSLog(@"viewWillAppear");    [super viewWillAppear:animated];    page1Data.text=editData;}
?

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

?

10.1?SecondViewController.h

在?@interface SecondViewController : UIViewController?之后添加:

?

@property (strong,nonatomic) id firstViewController;

?

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

?

10.2 SecondViewController.m

在 ?@implementation SecondViewController?之后添加:

?

@synthesize firstViewController;
?

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

?

-(void)viewWillDisappear:(BOOL)animated{    [super viewWillDisappear:animated];        if ([firstViewController respondsToSelector:@selector(setEditData:)]) {        [page2Data endEditing:YES];        [firstViewController setValue:page2Data.text forKey:@"editData"];    }}

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

?

?

?

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

?

?

?

?

?

?

?

?

?

?

?

?

?

?

读书人网 >移动开发

热点推荐