如何从AppDelegate.m访问tabBarController?

时间:2014-11-25 20:06:03

标签: ios objective-c iphone xcode5

这是我的故事板: storyboard

我正在尝试从AppDelegate.m

中的方法访问tabBarController

这是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:时,会向第三个标签栏项目Friends显示红色徽章。但每当我尝试选择tabBarItem时,它在NSLog中都显示为null。

我也尝试过以下方法: self.window.rootViewController.navigationController.tabBarController self.window.rootViewController.tabBarController

但没有任何作用。有什么帮助吗?

谢谢!

1 个答案:

答案 0 :(得分:5)

我相信(抱歉相信这里;-) TabBarController应该是你的第一个控制器,你的navigationBarController必须随后出现,因为它对navigationController(如果你改变一个标签)推送/弹出的内容没有多大意义。

我建议你删除你的第一个DemoViewController并关注NavigationController,你的第一个Controller就是你的TabBarController(只需设置&#34;是初始视图控制器&#34;在IB中)。

您可以像这样访问您的tabBar:

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