2014-11-25 3 views
2

Это моя раскадровки: storyboardКак получить доступ к tabBarController из AppDelegate.m?

Я пытаюсь получить доступ к tabBarController из метода внутри AppDelegate.m

Это AppDelegate.h:

#import <UIKit/UIKit.h> 
#import <FacebookSDK/FacebookSDK.h> 
#import "STAlertView.h" 


@interface demo_AppDelegate : UIResponder <UIApplicationDelegate> 

@property (strong, nonatomic) UIWindow *window; 
@property (nonatomic, strong) STAlertView *av; 

@end 

И это AppDelegate.m:

#import "demo_AppDelegate.h" 
#import "demo_Friends_ViewController.h" 


@implementation demo_AppDelegate 
-(void)showFriendReqAlert:(NSNotification *)pNotification{ 
    NSLog(@"Hello from showFriendReqAlert:"); 
    NSLog(@"Root: %@", [self.window.rootViewController.navigationController.tabBarController viewControllers]); 

} 
.... 
.... 
.... 
.... 
@end 

Моим главным мотивом является этот метод showFriendReqAlert: c а для третьей позиции табуляции отображается красный значок, который равен Friends. Но всякий раз, когда я пытаюсь выбрать tabBarItem, он говорит null в NSLog.

Я также попытался следующее: self.window.rootViewController.navigationController.tabBarController self.window.rootViewController.tabBarController

, но ничего не работает. Любая помощь?

Спасибо!

+0

Какова цель контроллера навигации между экрана входа в систему и панель вкладок? Какого рода segue вы используете при входе в систему? Ваш экран входа в систему не встроен в контроллер навигации, поэтому я ожидаю, что self.window.rootViewController.navigationController будет равен нулю. –

+0

У меня точно такая же проблема. RootViewController - это экран входа в систему, и я хочу изменить значок после получения уведомления. Вы решили свою проблему? –

ответ

5

Я верю (извините за то, что верю здесь ;-), что TabBarController должен быть вашим первым контроллером, и ваш навигаторBarController должен появиться после этого, поскольку для навигационного контроллера (если вы меняете вкладку) не имеет особого смысла то, что нужно нажать/поп ,

Я предлагаю вам удалить свой первый DemoViewController и после NavigationController и что ваш первый контроллер - ваш TabBarController (просто установите «Исходный контроллер просмотра» в IB).

Чем вы можете получить доступ к TabBar так:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    UITabBarController *tbc = (UITabBarController *)self.window.rootViewController; 
} 
+0

Спасибо, но первый «DemoViewController» - это тот, у кого есть экран входа в систему. Так что, должно быть, должно быть. – user3550458

+1

Хорошо. Вы пытаетесь получить доступ к своему tabBar со своего экрана входа в систему? Возможно, она не была загружена, пока вы ее не увидите. – theguy

+0

нет, не из экрана входа в систему, я фактически пытаюсь изменить элемент панели вкладок после фоновой выборки. Итак, я делаю это изнутри AppDelegate.m. – user3550458

Смежные вопросы