4

当我使用情节提要为 TabBarController 创建 XCode 4 iPhone 模板时,它会自动配置主视图控制器和所有内容。但是 AppDelegate 中的选项卡栏控制器没有属性。我可以为它创建一个插座,并尝试将它与我的故事板中的标签栏控制器链接,但这是不可能的。有没有更好的方法来访问 didFinishLaunchingWithOptions 方法中的选项卡栏控制器,因为它已经有点连接了?我想要的是 self.currentController = 标签栏控制器中的当前标签。

AppDelegate.h:

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@end

AppDelegate.m:

@interface AppDelegate()

@property (nonatomic, assign) UIViewController<SubViewContainer> *currentController;

@end

@synthesize window = _window
@synthesize currentController;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

//I need this piece of code to equal the Tab Bar Controller current tab
self.currentController = ?

return YES;
}

//And I'm gonna use this void for some statements about the Tab Bar Controller tabs:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:
(UIViewController *)viewController
{
// with some statements
}
4

2 回答 2

19

假设按预期在情节提要中进行了设置,这应该为您提供对标签栏控制器的引用didFinishLaunchingWithOptions:

NSLog(@"Root: %@", self.window.rootViewController);
UITabBarController *tabController = (UITabBarController *)self.window.rootViewController;

通常,您可以使用...获取当前控制器

self.currentController = [tabController selectedViewController];

...但是由于在执行此方法时未选择任何控制器,因此您想要的最佳猜测是...

self.currentController = [[tabController viewControllers] objectAtIndex:0];
于 2012-07-29T13:30:34.620 回答
2

用于self.window.rootViewController.tabBarController访问该视图控制器的标签栏控制器。

于 2012-07-29T14:25:13.743 回答