![](/img/trans.png)
[英]How to display navigation controller (set of view controllers) such as login or register before adding UITabBarController
[英]How to display login view before Tabbar Controller?
我目前正在開發一個iOS應用,該應用允許用戶查詢其帳戶(在網站上創建帳戶)。
我希望該用戶可以在連接后查詢其帳戶。 所以,我想要第一個視圖將是登錄視圖。 接受連接后,登錄視圖消失,第一個視圖控制器加載數據。
我怎樣才能做到這一點?
在FirstViewController的viewDidAppear上,添加以下代碼以在Tab之前顯示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];
}
}
您可以使用presentModalViewController(_:animated:completion:)
展示登錄視圖控制器。
成功登錄后,使用dismissModalViewControllerAnimated(_:completion:)
關閉該視圖控制器,因此您可以看到選項卡欄。
我嘗試了模態視圖控制器方法(即,在啟動時以模態形式顯示登錄視圖控制器,並且將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
)
( 想法來自這里 )
不過,我遇到的一個問題是,我插入的選項卡欄在所選(當前)選項卡中包含一個導航控制器,並且在過渡期間,導航欄將顯示為向上移動並“重疊”應用程序的狀態欄,僅動畫完成后跳回其正確位置。 非常煩人...通過將以下代碼行添加到導航控制器中包含的子視圖控制器中,我修復了該問題:
override func viewWillAppear(animated: Bool)
{
super.viewWillAppear(animated)
self.navigationController?.navigationBar.layer.removeAllAnimations()
}
( 從這里修復 )
更新:我注意到在某些模擬器(iPhone 6 +,iOS 9.0)上,不會出現導航欄“跳轉”,而是將其快速(但柔和)的動畫制作到位。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.