在导航控制器中设置后退按钮

Posted

技术标签:

【中文标题】在导航控制器中设置后退按钮【英文标题】:Setting up the back button in navigation controller 【发布时间】:2016-07-18 17:05:31 【问题描述】:

我似乎无法以编程方式正确设置 navigationController 的后退按钮,以显示前一个视图何时使用

self.navigationController?.pushViewController(newView, animated: true)

我使用循环将前一个视图中的所有视图隐藏在viewDidDisappear 中,并且在 viewDidAppear 中呈现的新视图中,我尝试以各种方式设置后退按钮的操作;但是,虽然我可以成功操作自动显示的后退按钮,例如隐藏它或更改它的图像,但我无法设置它的操作。

任何见解都将不胜感激,因为我发现的答案似乎都没有正常工作。这也是在不使用情节提要的情况下完成的

if let img = UIImage(named: "backButton") 
                self.navigationController?.navigationBar.backIndicatorImage = img
                self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = img
                print("IMAGE")
            
            topItem.backBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Rewind, target: self,
                                                        action:#selector(self.backButtonAction(_:)))

【问题讨论】:

在 ViewDidLoad 或 ViewWillAppear 中更改导航栏图像/文本,而不是在 ViewDidAppear 方法中更改。 它在viewDidAppear中发生了变化,它应该出现在ViewDidLoad中吗?在前一个视图中,导航控制器完全不同,因此我使用 viewDidAppear 和 viewDidDisappear 来显示/隐藏带有控制器的 UIView 和新 UIView 中的 viewDidAppear 来添加一个简单的标题并尝试向后退按钮添加一个功能(自动出现)弹出视图 【参考方案1】:

在您的情况下,在导航上添加一个自定义按钮。

class YourViewController: UIViewController 
//Navigation Items.

//left bar button item.
private var leftBarButtonItem : UIBarButtonItem!

//left button.
private var navigationLeftButton : UIButton!

//Your other variable/object declaration.

  func viewDidLoad() 
    super.viewDidLoad()
    self.leftBarButtonItem = UIBarButtonItem()
  

  func viewDidAppear(animated: Bool) 
      super.viewDidAppear(animated)

      self.setNavigationBackButton()
  



  private func setNavigationBackButton() 

    if(self.navigationLeftButton == nil) 
        self.navigationLeftButton = UIButton(type: UIButtonType.System)
    


    //Styling your navigationLeftButton goes here...

    self.navigationLeftButton.addTarget(self, action: Selector("backButtonTapped"), forControlEvents: UIControlEvents.TouchUpInside)
    self.leftBarButtonItem.customView = self.navigationLeftButton
    self.navigationItem.leftBarButtonItem = self.leftBarButtonItem
  

  func backButtonTapped(AnyObject:sender) 
   // Here add your custom functionalities.
   // Note, this will not pop to previous viewcontroller,

  

【讨论】:

这很好用;我以为我可以利用导航控制器中的后退按钮,因为它没有返回 nil 而是遇到了一些问题。谢谢

以上是关于在导航控制器中设置后退按钮的主要内容,如果未能解决你的问题,请参考以下文章

swift:在导航栏中设置后退按钮图像

在导航控制器中放置后退按钮

在导航栏中的默认“后退”按钮附近添加按钮

在 UINavigationBar 的子类中设置 backButton 框架

如何在导航栏中设置后退按钮的色调颜色[重复]

如何更改缩短的后退按钮标题?