1

我有一個標籤欄應用程序,其中有2個選項卡(2個視圖控制器)。我需要從標籤2(視圖控制器2)向標籤1(視圖控制器1)發佈通知。但問題是,我必須首先去標籤1(視圖控制器1)爲了註冊通知,如果我不這樣做,通知從未註冊。看來只有一次選擇它才分配視圖,然後移動到標籤2(視圖控制器2)發佈通知。NSNotification register place issue

在寄存器通知在viewDidLoad中和viewWillAppear中是這樣的:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(createYourOwnPressed:) name:@"createYourOwnPressed" object:nil]; 

那麼,怎樣才能i避免第一選擇選項卡1(視圖控制器1),然後發佈通知從標籤2(視圖控制器2)?

謝謝!

+0

處理通知的類應該始終處於活動狀態。我的建議是依靠另一個類,比如你的應用程序委託,它在適當的時候處理通知並與視圖控制器通信。 – 2013-05-03 18:00:24

+0

順便說一句你用的故事板? – 2013-05-04 12:03:56

+0

沒有故事板... xib的 – user2268539 2013-05-06 07:49:48

回答

0

如果在標籤中的視圖控制器的情況下說的appDelegate你嘗試這樣的事情在的applicationDidFinishLaunching

[[NSNotificationCenter defaultCenter] addObserver:tab1viewcontroller selector:@selector(createYourOwnPressed:) name:@"createYourOwnPressed" object:nil]; 

或做到這一點,同時加入視圖控制器的UITabBarController

ViewController *vc=[[ViewController alloc]initWithNibName:@"ViewController" bundle:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:vc selector:@selector(createYourOwnPressed:) name:@"createYourOwnPressed" object:nil]; 
+0

但我不能訪問appDelegate – user2268539 2013-05-03 07:36:13

+0

這個無關緊要的選擇器。選擇器發送給觀察者,所以需要在那裏聲明和實現。 – Tobi 2013-05-03 07:53:52

+0

你的意思是我必須在appDelegate中聲明並定義我的選擇器? – user2268539 2013-05-03 08:02:51

0

如果你想在視圖加載之前註冊通知(viewDidLoad,viewDidAppear),我建議你註冊視圖控制器初始化(initWithNibName,init等),這樣你就可以確定你的vc實例會得到通知秒。

否則,有一個小黑客來強制控制器加載視圖,象下面這樣:

MyViewController *vc = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
[vc view]; // force view load 

然後只需將其插入到您的導航控制器。這樣你就不必切換到第一個標籤來加載視圖。

+0

我沒有發現任何提及的故事板。並且由分開的那個你意味着另一個觀察者,我猜? – 2013-05-04 07:14:01