2016-02-18 87 views
2

我已閱讀有關類似問題,其中問題是由多個導航控制器引起的,但我只有一個。這是我的導航流程。隱藏在導航欄中的後退按鈕(但仍然有效)

VC = UIViewController中,NC = UINavigationController的

VC1 -modal-> NC -root-> VC2 -show-> VC3

VC1不是在導航嵌入式控制器,我開始使用performSegueWithIdentifier:發件人:模式。

VC2然後使用show SEGUE呈現VC3,這是一個其中的返回按鈕是不可見的。它仍然有效。但是,如果我退出主屏幕然後再次進入應用程序,它會出現確實,如下所示:

https://gfycat.com/VelvetyThisHamster

任何想法爲什麼會發生這種情況?

編輯:爲了把事情說清楚:我希望按鈕可見和運作(這不是它的工作是這樣的問題,但它是隱藏的)

編輯2:

如果我改變我的導航流向這個

NC -root-> VC2 -show-> VC3

然後後退按鈕按預期工作。所以問題是,如何在第一個導航控制器之前添加一個沒有導航控制器的常規視圖控制器?我之前需要它,因爲VC1應該沒有導航欄,VC2應該以模態方式呈現。

+0

你應該隱藏導航後退按鈕,查看會出現 –

+0

在VC3中?這使得按鈕既隱藏又不起作用。 – ludvigeriksson

+0

你可以添加一些VC代碼嗎?可能是初始化和viewDidLoad? – fdiaz

回答

1

我想我找到了問題的根源,所以我會在這裏發佈它,以防其他人遇到同樣的問題。

VC1和NC之間的模態表示是由背景隊列(通過在NSURLSessionDataTask的完成處理程序中精確調用performSegueWithIdentifier:sender:)完成的。通過將這一行代碼分配給主隊列,問題似乎消失了。

2

試試這個

隱藏

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

//use this 
self.navigationItem.setHidesBackButton(true, animated: false) 
//else use this 

self.navigationItem.leftBarButtonItem = nil 


} 

顯示

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

//use this 
self.navigationItem.setHidesBackButton(false, animated: false) 
//else 
self.navigationController.navigationItem.backBarButtonItem.enabled = TRUE 

} 

更新

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

//use this 
self.navigationItem.setHidesBackButton(false, animated: false) 
//else 
    let backButton = UIBarButtonItem(title: "leftbutton", style: UIBarButtonItemStyle.Plain, target: self, action: "buttonMethod") 

    self.navigationItem.leftBarButtonItem = backButton 

} 



func buttonMethod() { 
    print("Perform action") 
} 
+0

添加此按鈕時,該按鈕變得既不可見也不起作用(之前已經有效)。 – ludvigeriksson

+0

您想要隱藏按鈕或其他 –

+0

我希望按鈕既可見又可以正常工作。 – ludvigeriksson

1

轉出來,我將NavigationBar tint顏色設置爲「清除」。一旦我改變了它,後退按鈕就出現了。