7

AppDelegate = [[UIApplication sharedApplication] delegate]iPhoneプログラミングからnavControllerを取得する方法が不思議です。たとえば、AppDelegate を参照する他の viewController で。

applicationDelegate.h には次のものがあります。

UINavigationController *navController;

そして、applicationDelegate.m の以下

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

   [window addSubview: navController.view];
   [window makeKeyAndVisible];
}

とにかくmainWindowからnavControllerを取得する方法はありますか:

UIWindow *mainWindow = [appDelegate window];
4

5 に答える 5

18

この他の UIViewController が UINavigationController に含まれている場合は、次のように呼び出すだけです。

UINavigationController *navController = self.navigationController;

UIViewController から。

それ以外の場合は、UINavigationController を AppDelegate のプロパティとして設定できます。

// AppDelegate.h
@property (nonatomic, strong) UINavigationController *navController;

にアクセスしますappDelegate.navController

または、UINavigationController をウィンドウの rootViewController として設定できます。

[window setRootViewController:navController];

そして、どこからでも呼び出します:

UINavigationController *navController = window.rootViewController;
于 2012-04-06T06:33:38.137 に答える
1

navControllerをデリゲート クラスのプロパティとして作成できます。以下のサンプル:

applicationDelegate.h 内

@property (retain, nonatomic) UINavigationController *navController;

applicationDelegate.m 内

@synthesize navController;

次に、次のコードを使用して、他のクラスで navController を取得できます (デリゲート クラスが であると仮定しますMyApplicationDelegate)。

appDelegate = (MyApplicationDelegate*)[[UIApplication sharedApplication] delegate];
UINavigationController *navController = appDeleagte.navController
于 2012-04-06T06:26:24.220 に答える
1

追加のプロパティは必要ありません。次のマクロ定義を使用して、アプリケーションのほぼどこでも使用できます。

#define mainNavController (((AppDelegate*)[[UIApplication sharedApplication] delegate]).navController)

ソースの先頭またはソースにインポートする .h ヘッダー ファイルにマクロを配置すると、ローカル変数であるかのように mainNavController の使用を開始できます。

例えば:

[mainNavController pushViewController:myViewController animated:YES];

またはマクロなしで、コードで直接:

AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
appDelegate.navController; // do something with the navController

このコードはほとんどどこでも使用できます。これは、クラス内で作業していて、ViewController に直接アクセスできない場合に便利です。

于 2013-05-09T23:12:35.603 に答える