2016-06-21 69 views
1

我有一個嵌入導航控制器的視圖控制器。在UINavigationBar上設置導航項時發生崩潰

在導航欄上,我在條的中央有一個segmentedControl,然後在右側有一個編輯按鈕。

當我點擊編輯按鈕,下面的代碼進行燒成:

func editAction() { 

    if homeworkTasksVC?.editing == false { 

     // Set to editing 
     homeworkTasksVC?.setEditing(true, animated: true) 

     // Switch to "Done" button and 'Homework' title without segmented control 
     let navBar = self.navigationController?.navigationBar 
     let navItem = UINavigationItem(title: "Homework") 

     let doneButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Done, target: self, action: #selector(TasksParentViewController.editAction)) 
     navItem.rightBarButtonItem = doneButton 

     navBar!.setItems([navItem], animated: true) 


    } else { 

     // Stop editing 
     homeworkTasksVC?.setEditing(false, animated: true) 

     // Switch back to "Edit" button and segmented control 
     let navBar = self.navigationController?.navigationBar 
     let navItem = UINavigationItem(title: "Homework") 
     navItem.titleView = segmentControl 

     let editButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Edit, target: self, action: #selector(TasksParentViewController.editAction)) 
     navItem.rightBarButtonItem = editButton 

     navBar!.setItems([navItem], animated: true) 

    } 

} 

(注:homeworkTasksVC被引用,因爲有問題的觀點是兩個視圖之間的UIPageViewController比開關)

問題:當我點擊編輯時,分段控件切換文本標題沒有任何問題,然後再次點擊「編輯」再次切換回來,但是如果我點擊導航到不同視圖的視圖中的單元格,並且然後點擊'返回'返回到原始視圖,然後點擊編輯,即噸崩潰與下面的輸出:

2016年6月22日00:38:59.272 2.0 [1504:386949] *終止應用程序由於未捕獲的異常 'NSInternalInconsistencyException',原因:「不能調用setItems:動畫:直接在由控制器管理的UINavigationBar上。「 *第一擲調用堆棧: (0x23c85b0b 0x23442dff 0x23c85a51 0x283a0ced 0x118318 0x1189c8 0x2829b6a1 0x2841e0b9 0x2829b6a1 0x2829b631 0x2828356b 0x28283697 0x2829af51 0x2829abbf 0x28293547 0x28263dd5 0x28262379 0x23c479e7 0x23c475d7 0x23c4593f 0x23b941c9 0x23b93fbd 0x251b0af9 0x282cc435 0xe8cb4 0x23840873) 的libC++ abi.dylib:與未捕獲的異常終止鍵入NSException (LLDB)

回答

3

你想要什麼是設置當前視圖控制器上的navigationItem財產。當您在導航堆棧上推送第二個視圖控制器時,UINavigationController將接管導航欄項目的管理。它可能實際上是一個錯誤,它在推動之前工作。

相反的:

navBar!.setItems([navItem], animated: true)

請執行:

homeworkTasksVC.navigationItem = navItem

或:

self.navigationItem = navItem

哪一個挑依賴關於如何堆疊視圖控制器。

+0

你能解釋一下,在代碼中? :)我覺得這就是我已經在做...? – Max

+0

我更新了我的答案。 – robinkunde