【问题标题】:xcode navigation bar button statexcode导航栏按钮状态
【发布时间】:2019-03-15 07:03:10
【问题描述】:

我有一个编辑按钮 - UIBarButtonItem

点击后从屏幕上消失

当点击取消按钮时出现

如您所见,编辑按钮的状态在出现后保持选中状态。 如何以编程方式将导航栏按钮状态更改为正常状态?或者建议我一个更好的方法。

这是我的项目代码

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, introductionDelegate {

var navBarEditButton: UIBarButtonItem?
var navBarDeleteButton: UIBarButtonItem?
var navBarCancelButton: UIBarButtonItem?

override func viewDidLoad() {
    super.viewDidLoad()
    self.navBarEditButton = UIBarButtonItem(title: "Edit", style: .plain, target: self, action: #selector(editObjectsAction))
    self.navBarDeleteButton = UIBarButtonItem(title: "Delete", style: .plain, target: self, action: #selector(deleteObjectsAction))
    self.navBarCancelButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(cancelAction))

    self.navigationItem.leftBarButtonItems = [navBarEditButton!]
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@objc private func editObjectsAction(_ sender: UIBarButtonItem) {
    self.navigationItem.leftBarButtonItems = [navBarCancelButton!, navBarDeleteButton!]
}

@objc private func cancelAction(_ sender: UIBarButtonItem) {
    self.navigationItem.leftBarButtonItems = [navBarEditButton!]
}

@objc private func deleteObjectsAction(_ sender: UIBarButtonItem) {

}

【问题讨论】:

  • 上面的代码看起来不错。您正在使用哪种设备进行测试?请在代码的其他部分检查 navBarEditButton。可能是您在其他时候禁用它。
  • 用 iPhone 8 测试,在整个代码中 navBarEditButton 只遇到了四次。
  • 好的,我只是为了确定其他部分的禁用状态,但不是你的原因。

标签: swift xcode button state


【解决方案1】:

您可以使用UIButton 创建UIBarButtonItem 并处理该按钮上的状态。这样,您可以更改 UIBarButtonItem 样式,但只需检查您是否获得了预期的结果。

let myButton = UIButton(frame: CGRect(x: 10, y: 300, width: 100, height: 40)) // handle state on this button
self.navBarEditButton = UIBarButtonItem(customView: myButton)

【讨论】:

    【解决方案2】:

    我添加了一个新功能

    func refreshNavBarButton (navBarButton: inout UIBarButtonItem) {
        navBarButton = UIBarButtonItem(title: navBarButton.title, style: navBarButton.style, target: navBarButton.target, action: navBarButton.action)
    }
    

    我每次在导航栏按钮显示之前都会调用它

        refreshNavBarButton(navBarButton: &navBarEditButton!)
        self.navigationItem.leftBarButtonItems = [navBarEditButton!]
    

    【讨论】:

      猜你喜欢
      • 2013-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多