如何禁用导航栏中的后退按钮

有没有官方的方法如何设置UIBarButtonItem.enabled属性? 我试图在以前的控制器中设置backButtonItem。 但是enabled属性被忽略。

更多这个简单的示例项目 。

我不想像“制作你自己的leftBarButtonItem并设置它的alpha ……”这样的解决方案。

编辑:我不想隐藏它,只是用暗灰色禁用它并禁用用户交互。 这与禁用的leftBarButtonItem

截至今天,无法使用enabled属性禁用后退按钮。 除非您创建自定义项,否则backBarButtonItem属性将为nil ,即使这样,它也将忽略enabled属性。 这有几种(非令人满意的)方法。

隐藏按钮

这是苹果公司希望你做的事情,因为他们忽略了enabled属性。 它很简单

 navigationItem.hidesBackButton = true 

除非你有充分的理由,否则应该是首选方法。

禁用并着色导航栏

您可以在整个导航栏上禁用用户交互,并对其进行着色以使后退按钮显示为禁用。

 navigationController?.navigationBar.userInteractionEnabled = false navigationController?.navigationBar.tintColor = UIColor.lightGrayColor() 

遗憾的是,这会影响导航栏中的其他元素,因此,如果您在右侧有另一个条形按钮项,则可能不会选择它。

使用自定义左栏按钮项

leftBarButtonItem不会忽略enabled属性,因此您可以创建自定义项并在激活时手动触发弹出窗口。

 navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(ThisClass.backButtonTapped)) ... navigationItem.leftBarButtonItem?.enabled = false func backButtonTapped() { self.navigationController?.popViewController(animated: true) } 

但是,这将没有带有前三角形指示器的后挡条按钮样式。

如果要隐藏它, UInavigationItem有一个hidesBackButton属性。

在ViewController2.swift类中添加以下代码。

 override func viewDidLoad() { super.viewDidLoad() navigationItem.hidesBackButton = true; } 

它会隐藏你的后退按钮。