简体   繁体   中英

Swift: Edit Mode, link editButtonItem() to IBAction

I understand how to set my UITableView into edit mode, and how to dynamically create an edit button:

override func viewDidLoad() {
    tableView.allowsMultipleSelectionDuringEditing = true
    tableView.setEditing(false, animated: false)
    navigationItem.leftBarButtonItem = editButtonItem()
}

But when I tap the edit button, I would like a new button to appear on the navigation bar (ie a 'plus'/'add' button). To do this I think I need to create an IBAction , but I don't know how to link the editButtonItem() to an action. Any ideas?

Ok, big thanks to Ahmed and vadian for their comments, but what I got working was this:

override func setEditing(editing: Bool, animated: Bool) {
    // Toggles the edit button state
    super.setEditing(editing, animated: animated)
    // Toggles the actual editing actions appearing on a table view
    tableView.setEditing(editing, animated: true)

    if (self.editing) {
        navigationItem.rightBarButtonItem =
            UIBarButtonItem(barButtonSystemItem: .Add, target: self,
                            action: #selector(clickMe))

    } else {
        // we're not in edit mode 
        let newButton = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: navigationController, action: nil)
        navigationItem.rightBarButtonItem = newButton
    }

}


func clickMe()
{
    print("Button Clicked")
}

As the edit button is pressed (and flips from Edit -> Done and back again) the code in the IF/ELSE statements will execute.

You can replace the default action of editButtonItem() by assigning a new function defined in your view controller to its action property.

editButtonItem().action = #selector(yourCustomAction(_:))

func yourCustomAction(sender: UIBarButtonItem) {}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM