iOS开发:点击Edit/Done按钮时切换导航栏Back与Cancel按钮
实现导航栏Back与Cancel按钮切换的方法
你可以通过保存原始左侧导航按钮、动态替换自定义按钮的方式实现需求,以下是修改后的完整代码:
class NewViewController: UIViewController { @IBOutlet weak var editBarButtonItem: UIBarButtonItem! private var editMode: Bool = false // 存储初始的左侧导航按钮,用于退出编辑模式时恢复 private var originalLeftBarButtonItem: UIBarButtonItem? override func viewDidLoad() { super.viewDidLoad() // 保存系统默认的Back按钮 originalLeftBarButtonItem = navigationItem.leftBarButtonItem } @IBAction func editButtonClick(_ sender: Any) { if editMode { // 退出编辑模式:切换回Edit按钮,恢复Back按钮 editBarButtonItem.title = "Edit" navigationItem.leftBarButtonItem = originalLeftBarButtonItem } else { // 进入编辑模式:切换为Done按钮,替换为Cancel按钮 editBarButtonItem.title = "Done" let cancelButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(cancelButtonTapped)) navigationItem.leftBarButtonItem = cancelButton } editMode.toggle() } @objc private func cancelButtonTapped() { // 根据页面的呈现方式选择返回逻辑 if let navController = navigationController { // 页面通过push进入,执行pop返回 navController.popViewController(animated: true) } else { // 页面通过present弹出,执行dismiss返回 dismiss(animated: true) } } }
关键说明:
- 保存原始按钮:在
viewDidLoad中记录系统默认的Back按钮,确保退出编辑模式时能准确恢复 - 自定义Cancel按钮:进入编辑模式时创建Cancel按钮,并绑定点击事件,模拟Back按钮的返回行为
- 适配不同导航场景:根据页面是push还是present的方式,在
cancelButtonTapped中选择对应的返回方法
内容的提问来源于stack exchange,提问作者Cheok Yan Cheng
相关产品推荐
相关产品推荐

