2009-04-16 12 views
1

Mit einer UITabBar habe ich 4 Geschwisteransichten (eine pro Registerkarte Element). Wenn die App geladen wird, sind der erste Tab-Eintrag und die erste Ansicht sichtbar. Diese erste Ansicht hat eine IBAction, die eine NSNotification veröffentlicht. Jede der anderen drei Ansichten enthält Beobachter für die Benachrichtigung, aber sie können die Benachrichtigung nicht "hören", bis sie erst durch Berühren des Tab-Listenelements sichtbar gemacht werden.NSNotification zwischen Geschwisteransichten

Ist es möglich, eine NSNotification in den NSNotification-Observer einer gleichrangigen Sicht einzutragen, bevor die gleichgeordnete Sicht aktiviert ist, oder die Geschwisteransichten so zu laden, dass sie Benachrichtigungen überwachen können, ohne sie zuvor zu aktivieren?

Antwort

3

Die Geschwister Ansichten (oder, genauer gesagt, Cousin Ansichten :) sind wahrscheinlich nicht die Benachrichtigungen erhalten, weil sie noch nicht instanziiert wurden. Normalerweise instanziiert ein Ansichtscontroller seine Ansicht (und Untersichten), wenn er zum ersten Mal angezeigt wird.

Was Sie wahrscheinlich tun möchten, ist die Ansicht Controller haben die Benachrichtigung, anstatt die subview zu behandeln. Die View-Controller werden instanziiert, wenn die Registerkartenleiste eingerichtet ist, sodass sie sofort für den Empfang von Benachrichtigungen bereit sein sollten.

Sie können die Benachrichtigung vom View-Controller nicht wirklich an die Unteransicht weiterleiten, da Sie aus dem gleichen Grund versuchen werden, eine Ansicht zu übermitteln, die noch nicht instanziiert wurde. Was Sie tun sollten, ist, den Status im View-Controller zu verfolgen und dann die Subviews entsprechend in viewDidLoad oder loadView einzurichten (abhängig davon, ob Sie eine NIB verwenden oder nicht).

0

GELÖST -

Bei der Anwendung delegieren Implementierungsdatei:

- (void)applicationDidFinishLaunching:(UIApplication *)application { 

    [window addSubview:tabBarController.view]; 

    self.tabBarController.selectedViewController = [self.tabBarController.viewControllers objectAtIndex:2]; 
    self.tabBarController.selectedViewController = [self.tabBarController.viewControllers objectAtIndex:1]; 
    self.tabBarController.selectedViewController = [self.tabBarController.viewControllers objectAtIndex:0]; 
} 

Dies lädt alle (4) Ansicht-Controller und sie alle sofort zu NSNotifications hören.

+0

Wenn Sie immer noch Benachrichtigungen in den tatsächlichen Ansichten hören (anstatt die Controller anzeigen), beachten Sie, dass sie freigegeben werden, wenn Sie eine Warnung mit wenig Speicher erhalten. –

Verwandte Themen