向 UITableViewCell 添加一个按钮

add a button to UITableViewCell that

我正在为我的设置构建 table 视图。由于它们具有默认布局,因此我正在使用 UITableViewCellStyles。在几行中我需要一个开关。

在下面的代码中,开关是 'jumping around' 在我完整的 table 视图上,尽管将开关添加到单元格中!

如何向具有默认样式的单元格添加开关?

PS:我知道如何使用自定义单元格执行此操作,但如果不需要,我不想构建它们。

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

}

你用accessoryView试试。

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

感谢您为我指明了正确的方向 (cell?.accessoryView)。 let mySwith 也不起作用,所以我将代码更改为:

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