5

アプリの起動時にメインの UI 構造を作成するのが一般的ですが、アプリの起動時にユーザーがログインしていない場合は、通常の UI の上にモーダル イントロ/ログイン画面をすぐに表示します。

通常は、 を使用してモーダル UI を表示しても問題ありませんpresentViewController:animated:NO。これは、ユーザーが次のように表示されるためです: アプリの起動イメージ -> ログイン UI。

ただし、iOS 8 では、presentViewControlleranimated = NO で呼び出すと、View Controller を表示する前に、フレームの基になる View Controller が簡単に表示されるようです

例:

ユーザーがログインすると、ログイン UI からメイン UIが表示されるため、ログイン UI を最初に表示したくありません。

私が考慮していない別の方法はありますか?ここでストーリーボードが役に立ちますか?

4

3 に答える 3

2

個人的には、アプリケーションの起動時にログイン状態を確認してから、ログイン ビュー コントローラーまたはメイン ルート ビュー コントローラーをウィンドウのルート ビュー コントローラーとしてインストールします。

ユーザーがログインまたはログアウトすると、ウィンドウのルート ビュー コントローラーが置き換えられます。これもアニメ化できます。このアプローチは非常にきれいだと思います。

于 2014-11-05T19:56:08.760 に答える
1

ストーリーボードを使用し、初期ビュー コントローラーまたはログイン ビュー コントローラーをプログラムでインスタンス化しない場合、問題は解決すると思います。UIKit は、そのままにしておくと最もうまく機能するようです...

ストーリーボードを使用してログイン ビュー コントローラーを条件付きで起動する方法は次のとおりです。

https://stackoverflow.com/a/26657778/1442620

于 2014-11-05T22:16:35.777 に答える
1

あなたの正確なユースケースが何であるかはわかりませんが、私のアプリでは、ユーザーがその時点でどのView Controllerにいるかに関係なく、いつでもログアウトできます。次に、ログイン画面を表示してユーザーに再度ログインする機会を与え、ログインが成功した場合はユーザーを元の場所に戻す必要があります。

これが意味することは、ログイン ビュー コントローラーをルートにして、その上に他のコントローラーをスタックすることはできないということです。

ただし、VC スタックを保存してログイン画面にスワップアウトし、ログインが成功したらメインの VC スタックに戻すことができます。

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    var primaryViewController: UIViewController?
    var loginViewController: UIViewController?

    func userLoggedOut() {
        self.window?.rootViewController = loginViewController
    }

    func userLoggedIn() {
        self.window?.rootViewController = primaryViewController
    }

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // other setup code
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        loginViewController = storyboard.instantiateViewControllerWithIdentifier("LoginViewController") as? UIViewController
        primaryViewController = self.window?.rootViewController

        if (!currentlyLoggedIn) {
            userLoggedOut()
        }
        return true
    }
于 2014-11-08T02:27:32.153 に答える