J'ai un UITableView
dans un UIViewController
et j'ai ajouté un bouton d'édition à partir du code plutôt que de l'IB. Cela vient avec UITableViewControllers
mais pas les UIVC. Comment puis-je obtenir ce bouton pour mettre la vue de table en mode d'édition dans Swift? Merci d'avance pour votre aide.
class WordsViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.rightBarButtonItem = self.editButtonItem()
}
func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
return true
}
}
Créez rightBarButtonItem
comme ci-dessous avec une action.
Dans viewDidLoad()
:
let rightButton = UIBarButtonItem(title: "Edit", style: UIBarButtonItemStyle.Plain, target: self, action: Selector("showEditing:"))
self.navigationItem.rightBarButtonItem = rightButton
puis faire une fonction comme,
func showEditing(sender: UIBarButtonItem)
{
if(self.tableView.isEditing == true)
{
self.tableView.isEditing = false
self.navigationItem.rightBarButtonItem?.title = "Done"
}
else
{
self.tableView.isEditing = true
self.navigationItem.rightBarButtonItem?.title = "Edit"
}
}
Assure-toi, :
est ajouté au nom de la fonction dans Selector
d'action dans viewDidLoad
J'espère que ça aide!
Swift 3 & 4 répondez que IMHO est mieux que les autres réponses:
override func viewDidLoad() {
super.viewDidLoad()
let editButton = UIBarButtonItem(title: "Edit", style: .plain, target: self, action: #selector(toggleEditing)) // create a bat button
navigationItem.rightBarButtonItem = editButton // assign button
}
@objc private func toggleEditing() {
listTableView.setEditing(!listTableView.isEditing, animated: true) // Set opposite value of current editing status
navigationItem.rightBarButtonItem?.title = listTableView.isEditing ? "Done" : "Edit" // Set title depending on the editing status
}
Pourquoi est-ce que je pense que c'est mieux:
Voici une solution pour Swift 4.2 :
override func viewDidLoad() {
super.viewDidLoad()
// Use the edit button provided by the view controller.
navigationItem.rightBarButtonItem = editButtonItem
}
override func setEditing(_ editing: Bool, animated: Bool) {
// Takes care of toggling the button's title.
super.setEditing(!isEditing, animated: true)
// Toggle table view editing.
tableView.setEditing(!tableView.isEditing, animated: true)
}
Le contrôleur de vue setEditing
est appelé par défaut lorsque vous appuyez sur editButtonItem
. Par défaut, appuyez sur le bouton pour basculer son titre entre "Modifier" et "Terminé", appelant ainsi super.setEditing
s'en charge pour nous, et nous utilisons la méthode tableView
de setEditing
pour basculer l'état d'édition de la vue de table.
Sources:
Appelez cette méthode en cliquant sur le bouton.
tableView.setEditing(true, animated: true)
Ou si vous voulez que cela fonctionne comme une bascule
tableView.setEditing(!tableView.editing, animated: true)
Je suppose que vous avez un bouton qui appelle editButtonPressed
à la presse. L'implémentation de cette méthode pourrait donc ressembler à ceci.
override func viewDidLoad(){
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Edit", style: UIBarButtonItemStyle.Plain, target: self, action: Selector("editButtonPressed"))
}
func editButtonPressed(){
tableView.setEditing(!tableView.editing, animated: true)
if tableView.editing == true{
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: Selector("editButtonPressed"))
}else{
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Edit", style: UIBarButtonItemStyle.Plain, target: self, action: Selector("editButtonPressed"))
}
}
Cela change également le titre du bouton de la barre.
Remplacez le contrôleur de vue -setEditing:animated:
, appelez super et appelez la même méthode sur votre vue de table.
- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
[super setEditing:editing animated:animated];
[self.tableView setEditing:editing animated:animated];
}
Version Swift 3.0 de njuri post:
override func viewDidLoad() {
super.viewDidLoad()
PackageNameLabel.text = detailPackageName
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Edit", style: UIBarButtonItemStyle.plain, target: self, action: #selector(PackageDetailsTableViewController.editButtonPressed))
}
func editButtonPressed(){
tableView.setEditing(!tableView.isEditing, animated: true)
if tableView.isEditing == true{
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.plain, target: self, action: #selector(PackageDetailsTableViewController.editButtonPressed))
}else{
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Edit", style: UIBarButtonItemStyle.plain, target: self, action: #selector(PackageDetailsTableViewController.editButtonPressed))
}
}
Swift4.2 lors de l'édition sur le bouton UI
//On Button Click
@IBAction func mEditBtnAct(_ sender: Any) {
if(self.mtableView.isEditing == true)
{
self.mtableView.isEditing = false
self.mEditBtnOut.setTitle("Edit", for: .normal)
}
else
{
self.mTimerTablevw.isEditing = true
self.mEditBtnOut.setTitle("Done", for: .normal)
}
}