我在我的UITableViewController
中創建了一個按鈕作爲左欄按鈕項目,以便將當前用戶註銷並繼續登錄並登錄ViewController
。LogOut按鈕創建後退按鈕
問題是,點擊它會在登錄ViewController
上創建一個返回按鈕,用戶可以返回到上一個視圖。
我在我的UITableViewController
中創建了一個按鈕作爲左欄按鈕項目,以便將當前用戶註銷並繼續登錄並登錄ViewController
。LogOut按鈕創建後退按鈕
問題是,點擊它會在登錄ViewController
上創建一個返回按鈕,用戶可以返回到上一個視圖。
你的架構是錯誤的。您不應該對登錄控制器進行細分,這樣導航堆棧將不會爲空,您將在註銷事件之前擁有所有視圖控制器。當您按下退出鍵,你可以做的是:
如果它是根視圖控制器:
[self.navigationController popToRootViewControllerAnimated:true];
如果不是:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *login = [storyboard instantiateViewControllerWithIdentifier:@"Login"];
[self.navigationController setViewControllers:@[login] animated:true];
通常應用程序流程工作就像我們將loginViewController
設置爲我們的應用程序的rootviewcontroller
一樣,並根據我們的應用程序流程和需要推送nextViewController
。但在你的情況下,你是在退出時間,而不是你需要popToRootViewControllerAnimated
代碼
因此使用下面您註銷按鈕clickEvnet代碼再次推loginViewController
:
[self.navigationController popToRootViewControllerAnimated:YES];
我不建議使用隱藏BackBarButton和做任何其他的竅門,你可以把一個popToRootViewControllerAnimated
如果你正在做的代碼在迅速簡單地做,你可以使用下面的代碼:
self.navigationController?.popToRootViewControllerAnimated(true)
UPDATE 我只是爲你創建一個例子。您可以從以下網址下載:
https://github.com/nitingohel/swiftSeque
它的輸出就像下面:
@NitinGohel我真的很感謝你的幫助。不幸的是,我沒有設法與「poptoroot」做到這一點。相反,我用self.navigationItem.hidesBackButton = true self.navigationController ?.在viewWillAppear方法中setNavigationBarHidden(true,animated:false),它對我有用。 – Michal
@Michal沒問題,但這不是你需要考慮的好習慣。因爲在每次註銷時,都會推送一個loginviewcontroller的新對象。 –
使用此代碼對你有用:
self.navigationItem.hidesBackButton = YES;
您的應用程序的導航控制器的流量是錯誤的我認爲。登錄視圖控制器應該是導航控制器的rootview控制器,或者它應該是初始視圖控制器。你有另一個視圖控制器,如Wybierz miasto
!它不應該這樣。
您可以撥打
[self.navigationController popToRootViewControllerAnimated:YES];
從導航堆棧中的任何視圖控制器去rootview控制器。 (即註銷)。
如果必須要求流像這樣,那麼你可以隱藏和顯示後退按鈕一樣,
self.navigationItem.hidesBackButton = YES; //NO for show
如果你想隱藏特定視圖控制器的導航欄,你可以像
-(void)viewWillAppear:(BOOL)animated{
[self.navigationController.navigationBar setHidden:YES];
}
-(void)viewDidDisappear:(BOOL)animated{
[self.navigationController.navigationBar setHidden:NO];
}
在評論中詢問的快速更新
self.navigationItem.hidesBackButton = true
和
self.navigationController!.popToRootViewControllerAnimated(true)
和
override func viewWillAppear(animated: Bool) {
self.navigationController!.navigationBar.hidden = true
}
override func viewDidDisappear(animated: Bool) {
self.navigationController!.navigationBar.hidden = false
}
避免失誤迅速如有!對Swift不太熟悉!
希望這將有助於:)
不要做這樣躲在navigationBarItem
。它的技巧不建議。而不是調用
[self.navigationController popToRootViewControllerAnimated:YES];
始終保持登錄屏幕RootViewController
您可以顯示你寫的呢? –
在VIewWillApper中隱藏您的NavigatoinBar。 –
你的架構是錯誤的。您不應該對登錄控制器進行細分,這樣導航堆棧將不會爲空,您將在註銷事件之前擁有所有視圖控制器。當你按下注銷按鈕時,你可以做的是:實例化一個新的視圖控制器(登錄之一),並將導航控制器的視圖控制器設置爲僅僅是登錄控制器。你使用的是swift還是objective-C?我可以告訴你如何去做。你也可以(並且這是最好的方式)彈出到根視圖控制器(self.navigationController.popToRootViewController) –