0

どのviewControllerがiPhoneアプリケーションで実行されているかをAppdelegateでプログラム的に確認する可能性はありますか

4

4 に答える 4

2

これに対する簡単な答えはありません。メイン ウィンドウのルート ビュー コントローラーから始めて、ビュー コントローラーの階層をたどる必要があります。に遭遇した場合は、UINavigationControllerを見る必要がありますtopViewController。に到達したらUIViewController、 がある場合はそれを確認する必要がありますmodalViewController。タブ バー コントローラがある場合は、現在選択されているタブを確認する必要があります。

これは一度に2つのView ControllerUISplitViewControllerを表示できるため、複雑になります。

これが、 に追加できるカテゴリ メソッドの始まりですUIViewController。これは、通常のビュー コントローラーとナビゲーション コントローラーのみを処理します。

- (UIViewController *)topMostController {
    if (self.modalViewController) {
        return [self.modalViewController topMostController];
    } else {
        if ([self isKindOfClass:[UINavigationController class]]) {
            UINavigationController *nc = (UINavigationController *)self;

            return [nc.topViewController topMostController];
        } else {
            return self;
        }
    }
}

キー ウィンドウの でアプリ デリゲートからこれを呼び出しますrootViewController

于 2012-11-26T07:31:55.817 に答える
1

で rootViewController プロパティを設定したと仮定しますAppDelegate

[UIApplication sharedApplication].keyWindow.rootViewController;
于 2012-11-26T07:12:56.457 に答える
1

ビュー コントローラの場合、現在実行中のビュー コントローラ名を取得することはできません。

そのためには、アプリのデリゲート ファイルに次のメソッドを 1 つ記述し、各 viewcontroller ビューで getCurentViewController メソッドを呼び出します。

-(void) getCurentViewController:(UIViewController*) vc
{
      if([vc isMemberOfClass:NSClassFromString(@"vcName")])
      {
          //write your code here
      }
      else if([vc isMemberOfClass:NSClassFromString(@"vcName1")])
      {  
         //write your code here
      }

 }
于 2012-11-26T07:30:36.923 に答える
1
UIViewController *currentViewController = yourRootViewController;
while (currentViewController.presentedViewController) {
    currentViewController = currentViewController.presentedViewController;
}
//currentViewController is now your top-most viewController
//I use this same snippet in my production code
于 2012-11-26T08:08:52.990 に答える