2016-04-19 30 views
1

状況iOSアプリのどこからでも画面を表示するにはどうすればよいですか?

4つの画面とXamarinに内蔵されたiOSアプリ。アプリを起動すると、最初の画面に情報を取得しようとします。ユーザートークンの有効期限が切れた場合、例外がスローされます。 (_windowが最初の画面で_loginViewControllerは、ユーザーが自分のユーザー名とパスワードを入力する画面である。。)

_window.RootViewController.PresentViewController(_loginViewController, true, null);

AppDelegateは、これらのメッセージをリッスンし、受信したときに、ログイン画面が表示されますこれは、最初の画面では正常に機能します。しかし、どの画面からでも_loginViewControllerを表示する方法が必要です。

問題/質問AppDelegateから

  • 、現在の画面が何であるかを知っているスクリーンにする方法はありますか?
  • アプリのどこにいてもログイン画面を表示できるようにプロジェクトを構成する方法がありますか?
  • このシナリオでよく使用されている方法はありますか?

注:私のプロジェクトは、XamarinであるとiOSをサポートしています8+が、私はスウィフトのソリューションを得た場合、私は同様にそれに仕事ができると確信しています。

答えて

0

あなたがそうのようなAppDelegateで方法作成することができます。そして、

public void ShowLoginView() 
{ 
    _window.RootViewController.PresentViewController(_loginViewController,true,null); 
} 

コールどのようなViewControllerからでもそうです:

var appDelegate = (AppDelegate)UIApplication.SharedApplication.Delegate; 
appDelegate.ShowLoginView(); 

DismこれをLoginViewControllerに入れてください:

DismissModalViewController (true); 

これを使用すると、ナビゲーションスタックを使用することができます。

1

あなたは関係なく、現在のウィンドウのAppDelegateからログイン画面を表示するには、次のコードを使用することができます。

var loginViewController = UIStoryboard.FromName("MainStoryboard", NSBundle.MainBundle).InstantiateViewController("LoginPageViewController") as LoginPageViewController; 
Window.RootViewController = loginViewController; 
+0

悪くないアイデアを、私はあなたが元RootViewControllerのハンドルを保つことができることを追加しますので、あなたは可能性がユーザがログインした後で以前の階層を復元する。 – mgChristopher

1

あなたのAppDelegate上の静的プロパティとして定義され、次のコードを最上位のビューコントローラを見つけることができます。これは、this answerのC#のポートです

[Register("AppDelegate")] 
public partial class AppDelegate : UIApplicationDelegate 
{ 

    public static UIViewController TopViewController 
    { 
     get 
     { 
      return TopViewControllerWithRootViewController(UIApplication.SharedApplication.KeyWindow.RootViewController); 
     } 
    } 

    public static UIViewController TopViewControllerWithRootViewController(UIViewController rootViewController) 
    { 
     if (rootViewController is UITabBarController) 
     { 
      var tabBarController = rootViewController as UITabBarController; 
      return TopViewControllerWithRootViewController(tabBarController.SelectedViewController); 

     } 
     if (rootViewController is UINavigationController) 
     { 
      var navBarController = rootViewController as UINavigationController; 
      return TopViewControllerWithRootViewController(navBarController.VisibleViewController); 
     } 

     var presentedViewController = rootViewController.PresentedViewController; 

     if (presentedViewController != null) 
     { 
      return TopViewControllerWithRootViewController(presentedViewController); 
     } 

     return rootViewController; 

を。

そうのような上記のコードを使用し、任意の場所でアプリからのビューコントローラを提示するには:

MFMailComposeViewController mailController = new MFMailComposeViewController(); 

// ... 

AppDelegate.TopViewController.PresentViewController(mailController, true, null); 
関連する問題