NavigationItem左侧和上方未显示

时间:2015-10-21 08:30:04

标签: ios swift swift2

我有一个从Tab Bar控制器调用的视图,我想要一个leftBarButtonItem,一个带有徽标的topItem和一个rightBarButtonItem。

在第一个视图中,我成功地使用了带有徽标和rightBarButtonItem的topItem,但是不可能以编程方式或在故事板中拖动它来使用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解决了问题。

2 个答案:

答案 0 :(得分:1)

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

  • 你将标签栏控制器嵌入到导航控制器中(这不是btw的方法),所以要放置你的按钮,你必须把它们放在这样的父控制器上,例如< / p>

    // 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

-case 2:只需在第二个视图控制器中使用导航栏复制粘贴代码

答案 1 :(得分:0)

Swift 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)
}