2016-05-12 179 views
0

我在我的UITableViewController中創建了一個按鈕作爲左欄按鈕項目,以便將當前用戶註銷並繼續登錄並登錄ViewControllerLogOut按鈕創建後退按鈕

問題是,點擊它會在登錄ViewController上創建一個返回按鈕,用戶可以返回到上一個視圖。

+0

您可以顯示你寫的呢? –

+1

在VIewWillApper中隱藏您的NavigatoinBar。 –

+0

你的架構是錯誤的。您不應該對登錄控制器進行細分,這樣導航堆棧將不會爲空,您將在註銷事件之前擁有所有視圖控制器。當你按下注銷按鈕時,你可以做的是:實例化一個新的視圖控制器(登錄之一),並將導航控制器的視圖控制器設置爲僅僅是登錄控制器。你使用的是swift還是objective-C?我可以告訴你如何去做。你也可以(並且這是最好的方式)彈出到根視圖控制器(self.navigationController.popToRootViewController) –

回答

2

你的架構是錯誤的。您不應該對登錄控制器進行細分,這樣導航堆棧將不會爲空,您將在註銷事件之前擁有所有視圖控制器。當您按下退出鍵,你可以做的是:

如果它是根視圖控制器:

[self.navigationController popToRootViewControllerAnimated:true]; 

如果不是:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
    UIViewController *login = [storyboard instantiateViewControllerWithIdentifier:@"Login"]; 
    [self.navigationController setViewControllers:@[login] animated:true]; 
+0

你好,謝謝。有用。我用swift編寫代碼,但我設法改變了你的代碼。不幸的是,當它將我註銷並將我帶回登錄視圖控制器時,它會顯示帶控制器標題的頂部欄。我應該使用它隱藏它:self.navigationController!.navigationBar.hidden = true ? – Michal

+0

如果你這樣做,一定要讓viewWillDisappear再次可見,那麼它會正常工作。 –

+0

但爲什麼我應該這樣做,如果我不需要它呢? – Michal

0

使用此代碼在您的登錄視圖控制器viewWillAppear方法來隱藏後退按鈕

self.navigationItem.hidesBackButton = YES; 

和隱藏導航欄

[[self navigationController] setNavigationBarHidden:YES]; 

讓我知道如果你有任何問題,

+0

謝謝。有用。沒有後退按鈕了,但不幸的是導航欄仍然存在。我能做什麼 ? – Michal

+0

使用此代碼[[self navigationController] setNavigationBarHidden:YES]; @ Michal – Madhu

4

通常應用程序流程工作就像我們將loginViewController設置爲我們的應用程序的rootviewcontroller一樣,並根據我們的應用程序流程和需要推送nextViewController。但在你的情況下,你是在退出時間,而不是你需要popToRootViewControllerAnimated代碼

因此使用下面您註銷按鈕clickEvnet代碼再次推loginViewController

[self.navigationController popToRootViewControllerAnimated:YES]; 

我不建議使用隱藏BackBarButton和做任何其他的竅門,你可以把一個popToRootViewControllerAnimated

如果你正在做的代碼在迅速簡單地做,你可以使用下面的代碼:

self.navigationController?.popToRootViewControllerAnimated(true) 

UPDATE 我只是爲你創建一個例子。您可以從以下網址下載:

https://github.com/nitingohel/swiftSeque

它的輸出就像下面:

enter image description here

+0

@NitinGohel我真的很感謝你的幫助。不幸的是,我沒有設法與「poptoroot」做到這一點。相反,我用self.navigationItem.hidesBackButton = true self.navigationController ?.在viewWillAppear方法中setNavigationBarHidden(true,animated:false),它對我有用。 – Michal

+0

@Michal沒問題,但這不是你需要考慮的好習慣。因爲在每次註銷時,都會推送一個loginviewcontroller的新對象。 –

0

使用此代碼對你有用:

self.navigationItem.hidesBackButton = YES; 
2

您的應用程序的導航控制器的流量是錯誤的我認爲。登錄視圖控制器應該是導航控制器的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不太熟悉!

希望這將有助於:)

+0

偉大的保持它我不知道你的答案是什麼新的和你是怎麼得到+ –

+0

你好,謝謝。對不起,我沒有指定我在Swift中編寫代碼。我的初始視圖控制器是登錄viewController。當你登錄時,它會將你連接到「Wybierz Miasto」TableViewController,它連接到導航控制器。 「Wybierz Miasto」有一個左欄按鈕,可將您註銷。這是否有問題? – Michal

+0

那麼你應該改變它的標題註銷,或者你應該隱藏它,並再次按鈕到你想要的地方,並從該按鈕調用'poptorootviewcontroller'點擊 – Lion

1

不要做這樣躲在navigationBarItem。它的技巧不建議。而不是調用

[self.navigationController popToRootViewControllerAnimated:YES]; 

始終保持登錄屏幕RootViewController