我有一个从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
解决了问题。
答案 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)
}