4

ストーリーボードを使用して TabBarController 用の XCode 4 iPhone テンプレートを作成すると、メイン ビュー コントローラーとすべてが自動的に構成されます。ただし、AppDelegate には Tab Bar Controller のプロパティはありません。そのためのアウトレットを作成し、それをストーリーボードのタブ バー コントローラーにリンクしようとしましたが、それはできません。didFinishLaunchingWithOptions メソッドで Tab Bar Controller にアクセスするより良い方法はありますか? 私が欲しいのは、self.currentController = Tab Bar Controllerの現在のタブです。

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 に答える