将表视图设置为编辑模式

ric*_*chc 10 uitableview uiviewcontroller swift

我有一个UITableViewUIViewController并增加从代码,而不是IB编辑按钮.这附带UITableViewControllers但不是UIVC.如何在swift中使用此按钮将表格视图置于编辑模式?在此先感谢您的帮助.

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
  }
}
Run Code Online (Sandbox Code Playgroud)

iRi*_*iya 20

rightBarButtonItem通过操作创建如下.

viewDidLoad():

let rightButton = UIBarButtonItem(title: "Edit", style: UIBarButtonItemStyle.Plain, target: self, action: Selector("showEditing:"))
    self.navigationItem.rightBarButtonItem = rightButton
Run Code Online (Sandbox Code Playgroud)

然后做一个像,

 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" 
    }
}
Run Code Online (Sandbox Code Playgroud)

确保,:Selector动作中附加功能名称viewDidLoad
希望它有所帮助!

  • 这种情况的区别就是为什么你应该只使用内置的`editButtonItem`. (3认同)

Tun*_*Fam 14

Swift 3&4回答恕我直言比其他答案更好:

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
}
Run Code Online (Sandbox Code Playgroud)

为什么我认为它更好:

  1. 更少的代码行.
  2. 条形按钮初始化一次,但不是每按一次按钮.


小智 12

这是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)
}
Run Code Online (Sandbox Code Playgroud)

按下setEditing时,默认情况下会调用视图控制器editButtonItem。默认情况下,按下按钮会在“编辑”和“完成”之间切换其标题,因此调用super.setEditing将由我们来处理,我们使用tableViewsetEditing方法来切换表格视图的编辑状态。

资料来源:

  • 如果这个ViewController是UITableViewController的子类,super.setEditing()会为你调用tableView.setEditing。 (4认同)

Jur*_*oga 8

按下按钮调用此方法.

tableView.setEditing(true, animated: true)
Run Code Online (Sandbox Code Playgroud)

或者,如果您希望它像切换使用一样工作

tableView.setEditing(!tableView.editing, animated: true)
Run Code Online (Sandbox Code Playgroud)

我假设你有一个按钮,editButtonPressed按下按钮.因此,此方法的实现可能如下所示.

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"))
  }
} 
Run Code Online (Sandbox Code Playgroud)

这也改变了按钮的标题.