es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

allowsMultipleSelectionDuringEditing no funciona con una celda personalizada de UITableView.

Aquí está mi código:

class ViewController: UITableViewController{
    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.allowsMultipleSelectionDuringEditing = true
        tableView.setEditing(true, animated: false)
    }
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        cell.textLabel?.text = "\(indexPath.row)"
        return cell
    }
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 10
    }
}

Funciona bien para la celda predeterminada UITableViewCell. Pero si hago lo mismo con una celda personalizada UITableViewCell, entonces la selección no funciona.

Código con celda personalizada:

class ViewController: UITableViewController{
    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.allowsMultipleSelectionDuringEditing = true
        tableView.setEditing(true, animated: false)
    }
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "customcell", for: indexPath) as! ProductTblCell
        cell.lblProductTitle?.text = "\(indexPath.row)"
        return cell
    }
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 10
    }
}

Clase ProductTblCell:

class ProductTblCell: UITableViewCell {
    @IBOutlet weak var lblProductTitle: UILabel!
}

¿Alguien puede decirme qué está saliendo mal? Gracias de antemano.

Resultado:

Imagen

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La selección no funciona para la UITableViewCell personalizada porque UITableViewCell es una subclase de UIView. Cuando creas una UITableViewCell personalizada, agregas subvistas a la vista de contenido de la celda. Esto significa que el estilo de selección de la celda se aplica a la vista de contenido, no a las subvistas.

    Para solucionar este problema, puedes sobrescribir el método setSelected en tu clase personalizada de UITableViewCell y cambiar manualmente el estilo de selección de tus subvistas cuando la celda está seleccionada. Aquí tienes un ejemplo de implementación del método setSelected:

    class ProductTblCell: UITableViewCell {
        @IBOutlet weak var lblProductTitle: UILabel!
    
        override func setSelected(_ selected: Bool, animated: Bool) {
            super.setSelected(selected, animated: animated)
            if selected {
                lblProductTitle.textColor = .white
                contentView.backgroundColor = .blue
            } else {
                lblProductTitle.textColor = .black
                contentView.backgroundColor = .white
            }
        }
    }
    

    En esta implementación, cambiamos el color del texto de lblProductTitle y el color del fondo de la vista de contenido para indicar el estado de selección de la celda. Puedes personalizar esta implementación según tu caso de uso específico.

    Referencia: Stack Overflow

Comments are closed.