在编程中以编程方式向导航栏添加UIBarButtonItem?

158

我已经寻找这个解决方案有一段时间了,但是还没有找到。例如一个解决方案是

 self.navigationItem.setRightBarButtonItem(UIBarButtonItem(barButtonSystemItem: .Stop, target: self, action: nil), animated: true)

这段代码将添加一个带有“停止”图像的按钮。就像这样,还有其他带有“搜索”,“刷新”等的解决方案。但是如果我想以编程方式添加我想要的图像按钮怎么办?

12个回答

1
func viewDidLoad(){
let homeBtn: UIButton = UIButton(type: UIButtonType.custom)

        homeBtn.setImage(UIImage(named: "Home.png"), for: [])

        homeBtn.addTarget(self, action: #selector(homeAction), for: UIControlEvents.touchUpInside)

        homeBtn.frame = CGRect(x: 0, y: 0, width: 30, height: 30)

        let homeButton = UIBarButtonItem(customView: homeBtn)


        let backBtn: UIButton = UIButton(type: UIButtonType.custom)

        backBtn.setImage(UIImage(named: "back.png"), for: [])

        backBtn.addTarget(self, action: #selector(backAction), for: UIControlEvents.touchUpInside)

        backBtn.frame = CGRect(x: -10, y: 0, width: 30, height: 30)

        let backButton = UIBarButtonItem(customView: backBtn)
        self.navigationItem.setLeftBarButtonItems([backButton,homeButton], animated: true)
}

}

1
这是苹果的一个疯狂之处。当你说 self.navigationItem.rightBarButtonItem.title 时,它会显示 nil,而在 GUI 上它显示为 Edit 或 Save。像我这样的新手需要花费很长时间来调试这种行为。
有一个要求,即该项在第一次加载时将显示 编辑(Edit) 标题,然后用户点击它后,它将更改为 保存(Save) 标题。为了实现这一点,我按以下方式操作。
//视图加载将显示编辑(Edit)标题
private func loadRightBarItem() {
    let logoutBarButtonItem = UIBarButtonItem(title: "Edit", style: .done, target: self, action: #selector(handleEditBtn))
    self.navigationItem.rightBarButtonItem  = logoutBarButtonItem
}

// 点击“编辑项目”将变为“保存标题”

@objc private func handleEditBtn() {
    print("clicked on Edit btn")
    let logoutBarButtonItem = UIBarButtonItem(title: "Save", style: .done, target: self, action: #selector(handleSaveBtn))
    self.navigationItem.rightBarButtonItem  = logoutBarButtonItem
    blockEditTable(isBlock: false)
}

//点击保存项目将显示编辑标题

@objc private func handleSaveBtn(){
    print("clicked on Save btn")
    let logoutBarButtonItem = UIBarButtonItem(title: "Edit", style: .done, target: self, action: #selector(handleEditBtn))
    self.navigationItem.rightBarButtonItem  = logoutBarButtonItem

    saveInvitation()
    blockEditTable(isBlock: true)

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接