私の意見では、このようなもののための最善の戦略は、アプリが起動したときにメインビューコントローラ上に既に表示されているログイン画面であり、ユーザーがサインインした後でうまく割り振り解除されます。 (と同様に提案:Best practices for Storyboard login screen, handling clearing of data upon logout)これをエレガントに達成していません。
昨日試して、いくつかの後、私はこれを行うための最善の方法は、子ビュー・コントローラを使用していると思う:
1.あなたは通常(追加する必要がないのと同じようにXcodeでメインインターフェイスのストーリーボードを選択します。あなたのappDelegate
![main interface](https://i.stack.imgur.com/N5pZL.png)
2には何がviewDidLoad
にあなたのメインビューコントローラに以下を追加します。
// If user is not logged in, show login view controller
if (!isLoggedIn) {
// Instantiate Login View Controller from storyboard
UIStoryboard *mainSB = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
UIViewController *loginVC = [mainSB instantiateViewControllerWithIdentifier:@"Login"];
// Set the Login View Controller's frame
loginVC.view.frame = self.view.bounds;
// Add login screen as a subview and as a child view controller
[self.view addSubview:loginVC.view];
[self addChildViewController:loginVC];
[loginVC didMoveToParentViewController:self];
// Maintain a reference to the Login screen so we can dismiss it later
_loginVC = loginVC;
}
3.ユーザーがログインした後、通知またはデリゲートを使用してメインビューコントローラに通知します。次に、ログイン画面を任意の方法でアニメートできます。ここで私はディゾルブアニメーションを使用しています:
// Animate out the category chooser
[UIView animateWithDuration:0.2 animations:^{
// Dissolve the login screen away
[_loginVC.view setAlpha:0];
} completion:^(BOOL finished) {
// Remove login screen as a child view controller
[_loginVC willMoveToParentViewController:nil];
[_loginVC.view removeFromSuperview];
[_loginVC removeFromParentViewController];
// nil out property
_loginVC = nil;
}];
それだけです!このように、メインビューコントローラは常にあなたのウィンドウのルートビューコントローラであり、ログイン画面はユーザがログインした後に割り当てが解除され、最初にログイン画面を表示するときにフリッカーはありません。
ここでいくつかの良い答えがあります:http://stackoverflow.com/questions/19962276/best-practices-for-storyboard-login-screen-handling-clearing-of-data-upon-logou –