StoryBoard學習(5):使用segue頁面間傳遞數據
函數:
- - (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之后添加:
- @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頁。
注意: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之后添加:
- @property (strong, nonatomic) NSString *param;
注意:這里定義的參數 param 必須和前面ViewController.m中的prepareForSegue方法中的param相同!!!
7.2 修改SecondViewController.m
在@implementation SecondViewController之后添加:
- @synthesize param;
- @synthesize page2Data;
修改方法viewDidLoad:
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- // Do any additional setup after loading the view.
- page2Data.text=param;
- }
編譯運行,當在第1頁中輸入參數,跳到第2頁后可以顯示第1頁中輸入的參數。
8. 給第2頁中的按鈕[關閉窗口]添加事件。
單獨窗口打開SecondViewController.h和MainStoryboard,然后選中第2頁中的按鈕[關閉窗口],右鍵拖拽到SecondViewController.h中@interface SecondViewController : UIViewController之后;
在彈出窗口的Connection屬性選擇Action,Name屬性設置為closeWin。然后點按鈕[Connect]。
可以看到,在SecondViewController.h中增加了如下代碼:
- - (IBAction)closeWin:(id)sender;
在SecondViewController.m中增加了如下代碼:
- - (IBAction)closeWin:(id)sender {
- }
修改 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頁的輸入框中。
原文:http://stephen830.iteye.com/blog/1696614
文章列表