3

私は現在、ユーザーが自分のアカウントを参照できるようにする iOS アプリを開発しています (Web サイトでのアカウント作成)。

接続後にユーザーが自分のアカウントを参照できるようにしたい。だから、ログインビューになる最初のビューが欲しいです。接続を受け入れると、ログイン ビューが消え、最初のビュー コントローラーがデータをロードします。

どうやってやるの?

4

3 に答える 3

6

FirstViewController の viewDidAppear で、次のコードを追加して、Login ViewController をタブの前に表示します。

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    AppDelegate * delegate = [[UIApplication sharedApplication] delegate];
    if (!delegate.login) {  // BOOL value to know if user is logged in or not.If user succefully logged in set value of this as YES else NO.
    LoginViewController * lvc = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];

    [self presentModalViewController:lvc animated:NO];
    [lvc release];


    }
}
于 2012-04-23T14:09:46.640 に答える
3

presentModalViewController(_:animated:completion:)ログインビューコントローラーを表示するために使用できます。

ログインに成功しdismissModalViewControllerAnimated(_:completion:)たら、View Controller を閉じると、タブ バーが表示されます。

于 2012-04-23T13:43:43.117 に答える
1

モーダル ビュー コントローラー アプローチを試しました (つまり、ログイン ビュー コントローラーを起動時にモーダルに表示し、 にanimated:設定しfalseます)、問題がありますviewWillAppear(animated:)。試行が遅すぎると (つまりviewDidAppear(animated:))、基になるビュー コントローラーが一瞬だけ「表示」されます (少なくとも iOS 8 では)。

代わりに、ログイン ビュー コントローラーをウィンドウのルート ビュー コントローラー (メイン ストーリーボードの初期ビュー コントローラーとして設定) としてアプリを起動し、認証が成功したら、アプリのルート ビュー コントローラーを「交換」します。メイン タブ バー コントローラー (別のストーリーボードから遅延してインスタンス化します)。

すぐにではなく、スムーズな遷移 (アニメーション) でこれを実現するために、ログイン ビュー コントローラー内で次のようなコードを使用します。

// Run this code when authentication succeeds:

UIView.transitionWithView(self.view.window,
            duration: 0.3,
            options: UIViewAnimationOptions.TransitionCrossDissolve,
            animations: {
                window.rootViewController = tabBarController
            },
            completion: nil
        )

ここから取られたアイデア

ただし、私が遭遇した 1 つの問題は、挿入しようとしていたタブ バーに、選択した (現在の) タブにナビゲーション コントローラーが含まれていて、移行中にナビゲーション バーが上にシフトして表示され、アプリのステータス バーを「アンダーラップ」することだけでした。アニメーションの完了時に正しい位置に戻ります。非常に面倒です...ナビゲーションコントローラーに含まれる子ビューコントローラーに次のコード行を追加することで修正しました:

override func viewWillAppear(animated: Bool)
{
    super.viewWillAppear(animated)

    self.navigationController?.navigationBar.layer.removeAllAnimations()
}

ここから取得した修正

更新:一部のシミュレーター (iPhone 6+、iOS 9.0) では、ナビゲーション バーの「ジャンプ」が発生せず、代わりに素早い (ただし穏やかな) アニメーションが表示されることに気付きました。

于 2015-08-13T01:37:26.840 に答える