2012年8月23日 星期四

使用 Storyboard Segue 實作頁面切換(四)

現在要回傳Page2的資料到Page1

1. 首先在SecondPageViewController.h上加入紅色部分的程式碼,我們希望將Page2的資料通過一個Function來傳送。因此採用delegate的機制,將Function建制在Page1上,而傳送的資料變數在page2上。


@protocol Page2Delegate

-(void) passValue:(NSString *)value;

@end



@interface SecondPageViewController : UIViewController

@property (weak, nonatomic) IBOutlet UITextField *Page2TextField;

@property (strong) NSString  *dataString;

@property (weak) id<Page2Delegate> delegate;

2. 加入以下程式碼(紅色部分)到SecondPageViewController.m

@implementation SecondPageViewController
@synthesize delegate;
@synthesize Page2TextField;

- (IBAction)backToPage1:(id)sender {
    [self dismissViewControllerAnimated:YES completion:^{}];
   
  [delegate passValue:Page2TextField.text];
}

3. 針對TextField,如果有需要處理一下,就比照Page1的做法加入程式碼
- (IBAction)returnEnterPress2:(id)sender {
     [Page2TextField resignFirstResponder];
}

4. Page1上的FirstPageViewController.h需要稍加修改,來接受資料
#import "SecondPageViewController.h"

@interface FirstPageViewController : UIViewController <Page2Delegate>


5. 當然FirstPageViewController.m也需要修改

- (void) passValue:(NSString *)value
{
    Page1TextField.text = value;
}

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    id secondCon = segue.destinationViewController;

    [secondCon setValue:Page1TextField.text forKey:@"dataString"];
   
    [secondCon setValue:self forKey:@"delegate"];
}

6. 完成後的結果如下
到Page2後,修改TextField的內文,就會再傳回到Page1





Page1接收後,顯示結果


沒有留言: