Tengo un UITableView en un UIViewController y han añadido un botón de edición de código en lugar de IB. Este viene con UITableViewControllers pero no UIVCs. ¿Cómo puedo obtener este botón para poner la vista de la tabla en modo de edición en swift? Gracias de antemano por cualquier ayuda.

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
  }
}

OriginalEl autor richc | 2015-12-08

6 Comentarios

  1. 18

    Crear rightBarButtonItem como a continuación con una acción.

    En viewDidLoad() :

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

    y, a continuación, hacer una función como,

     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" 
        }
    }

    Asegúrese de que, : se anexa al nombre de la función en Selector de acción en viewDidLoad

    Espero que ayude!

    muchas gracias @iRealMe :-). ¿Cómo se puede llegar a mostrar Hecho una vez que se presiona por lo que puede tomar de la tabla de modo de edición?
    Actualizado mi respuesta!
    Esta distinción de los casos es por eso que usted sólo debe utilizar el construido en el editButtonItem.
    En su viewWillAppear() anular func, simplemente llame a la func de showEditing(nil). Usted debe actualizar esta función opcional con el botón de la barra.

    OriginalEl autor iRiziya

  2. 11

    Swift 3 & 4 respuesta que en mi humilde opinión es mejor de otras respuestas:

    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
    }

    Por qué creo que no es mejor:

    1. Menos líneas de código.
    2. Botón de la barra se inicializa una vez, pero no cada vez que pulse el botón.

    OriginalEl autor Tung Fam

  3. 7

    Llamar a este método en el botón haga clic en.

    tableView.setEditing(true, animated: true)

    O si quieres que funcione como una alternancia de uso

    tableView.setEditing(!tableView.editing, animated: true)

    Supongo que tiene un botón que llama a editButtonPressed en la prensa. De modo que la implementación de este método podría tener este aspecto.

    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"))
      }
    } 

    Esto también cambia el título del botón de la barra.

    OriginalEl autor njuri

  4. 6

    Aquí es una solución para 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)
    }

    El punto de vista del controlador de setEditing se llama por defecto cuando la editButtonItem es presionado. Por defecto, pulsando el botón de activación de su título entre «Editar» y «Hecho», por lo que llamar a super.setEditing cuida de que para nosotros, y hacemos uso de la tableView‘s setEditing método para cambiar el estado de edición de la vista de tabla.

    Fuentes:

    Si este ViewController es una subclase de UITableViewController, super.setEditing() será llamada en formato tableview.setEditing para usted.

    OriginalEl autor Jared Cleghorn

  5. 3

    Reemplazar el controlador de vista del -setEditing:animated:, llamada super, y llama al mismo método en su vista de tabla.

    - (void)setEditing:(BOOL)editing animated:(BOOL)animated
    {
        [super setEditing:editing animated:animated];
    
        [self.tableView setEditing:editing animated:animated];
    }
    pls puede registrar su código sugerido…
    No sé Swift sintaxis, sólo puedo publicar en Objective-C.
    no sé ObjC así que voy a tener que dejar que alguien más vota por tu respuesta! Gracias por la ayuda, aunque!

    OriginalEl autor Christian Schnorr

  6. 1

    Swift versión 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))
        }
    }
    Gracias esto me ayudó mucho. Pero para mí sólo funciona si puedo añadir @objc en frente de la func editButtonPressed(). Tal vez esto podría ser actualizado en su solución?

    OriginalEl autor Mike Kirkwood

Dejar respuesta

Please enter your comment!
Please enter your name here