2015-10-21 92 views
2

我有一個視圖是誰從一個標籤欄控制器調用,我想要一個leftBarButtonItem,一個帶標誌的topItem和一個rightBarButtonItem。NavigationItem左側和頂部沒有顯示

在第一個視圖中,我成功地將topItem與徽標和rightBarButtonItem一起使用,但不可能通過編程方式或在故事板中拖動它來獲得leftBarButtonItem。 我不明白爲什麼。這是代碼。

private func setNavBarItems() { 

    self.navigationItem.leftBarButtonItem?.image = UIImage(named: "empty-photo-red") 

    if let navigationBar = self.navigationController?.navigationBar as? SeetyNavigationBar { 
     let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 40, height: 40)) 
     imageView.contentMode = .ScaleAspectFit 
     let image = UIImage(named: "logo-trans") 
     imageView.image = image 
     navigationBar.topItem?.titleView = imageView 
    } 

    self.navigationItem.rightBarButtonItem!.image = UIImage(named: "FAQ") 
} 

如果我解開leftBarButton以 「!」應用程序崩潰,所以我想沒有leftBarButton,但爲什麼?

當我從這個視圖執行segue到下一個時,我得到了leftBarButtonItem和rightBarButtonItem以及帶有標誌的topItem消失。我用我在viewDidLoad()

編輯調用相同的功能:對於我topItem誰正在消失:self.navigationItem.titleView = imageView 而不是navigationBar.topItem?.titleView = imageView解決了這個問題。

+0

對於導航欄中的第一個控制器,iOS不會自動添加左欄,因爲沒有'上一個'控制器。如果需要,您將需要手動添加它:參考:http://stackoverflow.com/questions/20949844/add-left-and-right-bar-button-item-in-category-of-navigation-controller-class – Shripada

回答

1

在設置圖像之前,您似乎沒有創建任何按鈕,您必須創建按鈕。 也爲打算在第二個屏幕有兩個選項之後消失的形象,你有你的標籤欄控制器,它下面有兩個被鏈接到你的標籤欄控制器的觀點,從那裏:

  • 你嵌入導航控制器的標籤欄控制器(這是不是BTW要走的路),所以把你的按鈕,你要交往的女孩,例如像這樣父控制器

    // adding right button 
    let changeLocButton = UIBarButtonItem() 
    changeLocButton.title = "/!\\" 
    changeLocButton.action = "AnnotationsStatus:" 
    changeLocButton.target = self 
    self.parentViewController?.navigationItem.setRightBarButtonItem(changeLocButton, animated: false) 
    
  • 你將兩個視圖中的每個視圖嵌入到導航控制器中,因此您必須爲每個視圖創建按鈕。

    // adding right button 
    let changeLocButton = UIBarButtonItem() 
    changeLocButton.title = "/!\\" 
    changeLocButton.action = "AnnotationsStatus:" 
    changeLocButton.target = self 
    self.navigationItem.setRightBarButtonItem(changeLocButton, animated: false) 
    

爲你的形象這是相同的 - 案例1:

if let navigationBar = self.parentViewController?navigationController?.navigationBar as? SeetyNavigationBar 

- 案例2:只複製與導航欄的代碼粘貼在第二個視圖控制器

+0

當我執行我的segue時,在下一個視圖中消失的圖像是topItem而不是leftBarButtonItem或rightBarButtonItem,對不起,如果不清楚 – Luis

+0

好吧,它是同樣的事情,我會更新答案,但要清楚你放在哪裏請導航控制器 –

0

斯威夫特4.0

let btnBack = UIButton(type: .custom) 
btnBack.bounds = CGRect(x: 0, y: 0, width: 44, height: 44) 
btnBack.addTarget(self, action: #selector(self.backButtonAction(sender:)), for: .touchUpInside) 
btnBack.setImage(#imageLiteral(resourceName: "back_image"), for: .normal) 

let leftBarButton = UIBarButtonItem(customView: btnBack) 
self.navigationItem.setLeftBarButton(leftBarButton, animated: true) 

//後退按鈕動作

@objc func backButtonAction(sender: UIButton) { 
self.navigationController?.popViewController(animated: true) 
} 
相關問題