0

ユーザーがログインするたびにインスタンス化するログイン ストーリーボードがあります。実際のアプリケーションであるメイン ストーリーボードがあります。

アプリケーションを非アクティブ (アプリを閉じる) に設定してから再度アクティブにする (アプリを再度開く) と、AppDelegate は 2 分間のタイムアウトが発生したかどうかを確認します。もしそうなら、タイムアウトしたというアラートを表示したいのですが、これはうまくいきます。

私が抱えている問題は、ログイン画面にいる場合、メッセージを表示したくないということです。私の Storyboard は TabBarController を使用しているため、有効なナビゲーション コントローラーがありません。LoginViewController が現在 App Delegate から表示されているかどうかを確認するにはどうすればよいですか? 一番上のView Controllerのクラス名を取得するにはどうすればよいですか?

NavigationController は null です。参考までに

4

1 に答える 1

1

まず、UITabBarController への参照が必要です。IB で初期ビュー コントローラーとして設定されている場合、これは非常に簡単です。ストーリーボードを開き、UITabBarController の左側にある小さな灰色の矢印を探すことで、これを確認できます。その場合は、次のようにします。

UITabBarController *myTabBarController;
if ([_window.rootViewController isKindOfClass:[UITabBarController class]]) {

    NSLog(@"This window's rootViewController is of the UITabBarController class");

    myTabBarController = (UITabBarController *)_window.rootViewController;

}

UITabBarController を使用している場合は、次の方法で子 UIViewController への参照を取得できます。

[myTabBarController objectAtIndex:index];

TabBarController を直接クエリすることもできます。

NSLog(@"Selected view controller class type: %@, selected index: %d", [myTabBarController selectedViewController], [myTabBarController selectedIndex]);

ゼロベースのインデックス スキームは、プログラムまたは IB (一番左のタブ = インデックス 0) を介して設定したタブの順序に従います。

UITabBarController への参照を取得したら、残りは非常に簡単です。

LoginViewController* myLoginViewController;

if(![[myTabBarController selectedViewController] isKindOfClass:[LoginViewController class]){
    //If the currently selected ViewController is NOT the login page
    //Show timeout alert
}
于 2013-04-17T17:23:12.653 に答える