我有一个从选项卡栏控制器调用的视图,我想在其中拥有一个leftBarButtonItem,带有徽标的topItem和一个rightBarButtonItem。

在第一个视图上,我成功地获得了带有徽标的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解决了该问题。

最佳答案

似乎您没有创建任何按钮,但在设置图像之前必须先创建按钮。
同样对于进入第二个屏幕后消失的图像,有两个选项,您有一个标签栏控制器,在它的下面有两个链接到您的标签栏控制器的视图:

  • 您将选项卡栏控制器嵌入到导航控制器中(这并不是顺带一提),因此要放置按钮,您必须像这样将其放置在父控制器上
    // 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:只需将代码复制并粘贴到第二个视图控制器中的导航栏中

    10-04 21:05