1. 程式人生 > >IOS_簡單地頁面跳轉以及NSNotificationCenter(通知中

IOS_簡單地頁面跳轉以及NSNotificationCenter(通知中

實現頁面1跳轉到頁面2,頁面2填寫資料後返回到頁面1,頁面1的label會顯示資料.

首先畫介面,上面是Navigation Bar 


給頁面2設定storyboard id : 


針對頁面2建立一個類.並設定自定義類.


給按鈕GO新增一個Action:

- (IBAction)goBtn{
    // 獲取 storyboard
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" //storyboard名稱
                                                         bundle:nil];
    // 例項化ViewController
    nextViewController *nextVC = [storyboard instantiateViewControllerWithIdentifier:@"nextViewController" // 在第二個頁面剛剛定義的Storyboard ID
                                  ];
    // 展示ViewController
    [self presentViewController:nextVC //要展示的 ViewController
                       animated:YES // 是否 有動畫
                     completion:nil // 額外操作
     ];
}
此時已經可以從頁面1跳轉到頁面2.,接下來就是讓他回來!

新增`完成`和`返回`的Action,實現:

- (IBAction)backBtn:(UIBarButtonItem *)sender {
    [self dismissViewControllerAnimated:YES completion:nil];
}

- (IBAction)doneBtn:(UIBarButtonItem *)sender {
    [self dismissViewControllerAnimated:YES completion:nil];
}

這樣就實現了返回.

最後實現通知中心的實現,讓頁面1顯示來自頁面2的資訊

  1. 新增textfiled的引用
  2. 修改doneBtn:
- (IBAction)doneBtn:(UIBarButtonItem *)sender {
    [self dismissViewControllerAnimated:YES completion:nil];
    // 把text裝在字典裡
    NSDictionary * dic = [NSDictionary dictionaryWithObject:self.textfiled.text forKey:@"text_of_page_2"];
    // 傳送一個通知
    [[NSNotificationCenter defaultCenter] postNotificationName:@"call_page_1" // 通知的名字
                                                        object:nil
                                                      userInfo:dic // 傳送的資料
     ];
}

返回頁面1接收通知:

新增對label的引用

@property (weak, nonatomic) IBOutlet UILabel *textlabel;
在viewDidLoad中新增觀察者
// 新增一個觀察者
    [[NSNotificationCenter defaultCenter] addObserver:self // 觀察者
                                             selector:@selector(nextViewControllerCallBack:) // 觀察到後執行的訊息
                                                 name:@"call_page_1" // 觀察的標識
                                               object:nil];
// 執行的訊息
- (void) nextViewControllerCallBack:(NSNotification *) notification{
    // 獲取字典型別的資料
    NSDictionary *dic = [notification userInfo];
    // 消失
    self.textlabel.text = [dic valueForKey:@"text_of_page_2"];
}


效果: