向 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
我正在为我的设置构建 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