Estoy creando una vista de tabla para mi entorno. Como tienen un diseño predeterminado, estoy usando UITableViewCellStyles. En unas pocas filas necesito un interruptor.

¡En el código a continuación, el interruptor está 'saltando' sobre mi vista de tabla completa, aunque se agregó el interruptor a la celda!

¿Cómo agrego un interruptor a la celda que tiene un estilo predeterminado?

PD: Sé cómo hacerlo usando celdas personalizadas, pero no quiero construirlas si no es necesario.

let mySwitch: UISwitch = {
    let assign = UISwitch()
    assign.setOn(true, animated: true)
    assign.addTarget(self, action: #selector(ContactDetailsVC.assignSwitch), for: .valueChanged)
    return assign
}()

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    // case .....

    var cell: UITableViewCell? = tableView.dequeueReusableCell(withIdentifier: "cellId")

    cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cellId")
    cell?.textLabel?.text = "Test"
    cell?.contentView.addSubview(mySwitch)
    cell?.translatesAutoresizingMaskIntoConstraints = false
    cell?.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[v0]-20-|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": mySwitch]))
    cell?.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[v0]|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": mySwitch]))

    return cell!

    // case .....

}
0
Koen 5 abr. 2017 a las 15:00

2 respuestas

La mejor respuesta

Lo intentas con accessoriesView.

let mySwitch: UISwitch = {
let assign = UISwitch()
assign.setOn(true, animated: true)
assign.addTarget(self, action: #selector(ContactDetailsVC.assignSwitch), for: .valueChanged)
return assign
}()

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

// case .....

var cell: UITableViewCell? = tableView.dequeueReusableCell(withIdentifier: "cellId")

cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cellId")
cell?.textLabel?.text = "Test"
cell?.accessoryView = mySwitch
return cell!


}

https://developer.apple.com/reference/uikit/uitableviewcell/1623219-accessoryview

0
Nirav Hathi 5 abr. 2017 a las 13:08

Gracias por ponerme en la dirección correcta (cell? .AccessoryView). El let mySwith tampoco funcionaba, así que cambié el código a:

var mySwitch = UISwitch()

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

   // case .....

   var cell: UITableViewCell? = tableView.dequeueReusableCell(withIdentifier: "cellId")
   cell?.accessoryView = mySwitch
   mySwitch.setOn(true, animated: true)
   mySwitch.addTarget(self, action: #selector(SettingsVC.mySwitched), for: .valueChanged)

   // case
1
Koen 6 abr. 2017 a las 13:09