swift 当按下编辑栏按钮时,如何将后退栏按钮替换为取消栏按钮?

htrmnn0y  于 12个月前  发布在  Swift
关注(0)|答案(1)|浏览(101)

以下是在系统语言设置中找到的条形按钮行为:

1.按下编辑栏按钮时,后退栏按钮将被取消栏按钮取代。
1.当按下完成栏按钮时,取消栏按钮将被返回栏按钮取代。
我使用UIViewController
在编辑栏按钮和完成栏按钮之间切换没有问题。
但是,我不确定如何在后退栏按钮和取消栏按钮之间切换。
你能指导我如何做到这一点吗?
这是我的代码片段。

class NewViewController: UIViewController {

    @IBOutlet weak var editBarButtonItem: UIBarButtonItem!
    
    private var editMode: Bool = false
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    @IBAction func editButtonClick(_ sender: Any) {
        if editMode {
            editBarButtonItem.title = "Edit"
            
            // TOD: How to provide a back bar button item at top left?
        } else {
            editBarButtonItem.title = "Done"
            
            // TOD: How to provide a "Cancel" bar button item at top left?
        }
        
        editMode.toggle()
    }
    
}
rjee0c15

rjee0c151#

首先,不要创建自己的编辑/完成按钮。UIViewController对此提供了内置支持。

func viewDidLoad() {
    super.viewDidLoad()

    self.navigationItem.rightBarButtonItem = self.editButtonItem
}

editButtonItem为您提供。它在“编辑”和“完成”之间切换。点击时,它调用UIViewController方法setEditing:animated:,并切换isEditing属性。您所需要做的就是覆盖该方法来添加/删除“取消”按钮。

override func setEditing(_ editing: Bool, animated: Bool) {
    super.setEditing(editing, animated: animated)

    if (editing) {
        // Edit has been pressed. Add the Cancel button
        self.navigationItem.setLeftBarButton(UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(cancelHandler)), animated: animated)
    } else {
        // Done has been pressed. Remove the Cancel button and the back button will reappear
        self.navigationItem.setLeftBarButton(nil, animated: animated)
    }
}

@objc func cancelHandler(_ button: UIBarButtonItem) {
    // handle the Cancel button
}

UITableViewController中,使用内置特性来支持标准的Edit/Done按钮甚至更有用,因为表视图控制器会自动设置其表视图的isEditing属性。您的问题中的设置屏幕正在使用UITableViewController

相关问题