2017年2月28日 星期二

iOS storybaord 上兩個 ViewController 之間用 NSNotificationCenter 的userInfo 傳遞value 的問題

在iOS Swift裡有好幾個傳遞value的方法,

像透過ViewController 的performSegueWithIdentifier(identifier:String,sender:AnyObject?)

透過protocol 傳等等 還有好多方法

但是這次用的是NSNotificationCenter 的userInfo

首先在第一個viewController 用 NSNotificationerCenter.defaultCenter().postName方法
第二個viewController 用 NSNotificationerCenter.defaultCenter().addObserver方法

看了網路上好多人的版本再看看自己的也都對,而且以前做的也成功..找了半天也找不到哪裡問題 後來找到了原因

之前能成功是因為第二個ViewController 不在storyboard上面,而是直接programically 產生的,然後這樣的情況之下 在第二個ViewController裡是觀察的到NSNotificationCenter傳過來的訊息的

之後,也就是這次是兩個ViewController都是在sotryboard上的,所以在第一個viewController 按下按鈕後,第二個viewController是收不到第一個 ViewController的post notification的.

解決辦法就是在第一個viewController 要presentViewController時,把裡面的viewController換成



let storyBoard = UIStoryboard.init(name: "Main", bundle: nil)

        let vc = storyBoard.instantiateViewControllerWithIdentifier("ViewController2")

這樣果然數值就傳過去了


另一個不用這兩行的方法就是 還用performSegueWithIdentifier ,但是 在storyboard上面要把segue kind 改成 "Modal" 而不是預設的"show"

這樣達到一樣效果