文章出處

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


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()