在自定义单元格中使用 UISwitch 设置对象属性
Set object properties using a UISwitch in a custom cell
我正在尝试做一些应该非常简单的事情,但是由于我对Swift缺乏经验,我遇到了一些问题。
我有一个 ViewController
,其中有一个 TableView
,其中包含从对象数组(称为 allListItems
)填充的自定义单元格。这些对象是使用 Realm Model Object
创建的,我正在使用它而不是 Core Data,我认为这可能是相关的。每个自定义单元格中都有一个 UISwitch
,理想情况下我想对其进行设置,以便当用户切换 UISwitch
时,它会修改布尔值 isSelected
属性对于那个 indexPath.row
,然后将该对象附加到一个单独的数组,称为 selectedListItems
.
我对 SO、Tuts+ 和 AppCoda 的所有搜索都表明我应该在这里使用协议 - 委托模式,我的协议在我的自定义单元格 class 中,我的委托在我的 ViewController
class。在一天的大部分时间里,我都没有运气,但是,我认为这可能是由于数组是领域模型对象。
正如我所提到的,我对 Swift 和一般编程还很陌生,因此非常感谢 ELI5 的回复!提前致谢!
作为参考,这是我的自定义单元格:
import UIKit
class AllListItemsTableViewCell: UITableViewCell {
@IBOutlet var toggleIsSelected: UISwitch!
@IBOutlet var listItemLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
不要使用建议的协议/委托模式,而是使用回调。
这在 Swift.
中非常容易
在 table 视图单元格中声明一个带闭包的可选变量
var callback : ((UITableViewCell, Bool) -> Void)?
并在 IBAction
中为开关调用它
@IBAction func switchChanged(sender : UISwitch) {
callback?(self, sender.on)
}
在cellForRowAtIndexPath
设置回调
cell.callback = { (tableViewCell, switchState) in
if let indexPath = self.tableView.indexPathForCell(tableViewCell) {
// do something with index path and switch state
}
}
如果同时移动了单元格以获得最新的索引路径,则传回单元格可能很有用。
我正在尝试做一些应该非常简单的事情,但是由于我对Swift缺乏经验,我遇到了一些问题。
我有一个 ViewController
,其中有一个 TableView
,其中包含从对象数组(称为 allListItems
)填充的自定义单元格。这些对象是使用 Realm Model Object
创建的,我正在使用它而不是 Core Data,我认为这可能是相关的。每个自定义单元格中都有一个 UISwitch
,理想情况下我想对其进行设置,以便当用户切换 UISwitch
时,它会修改布尔值 isSelected
属性对于那个 indexPath.row
,然后将该对象附加到一个单独的数组,称为 selectedListItems
.
我对 SO、Tuts+ 和 AppCoda 的所有搜索都表明我应该在这里使用协议 - 委托模式,我的协议在我的自定义单元格 class 中,我的委托在我的 ViewController
class。在一天的大部分时间里,我都没有运气,但是,我认为这可能是由于数组是领域模型对象。
正如我所提到的,我对 Swift 和一般编程还很陌生,因此非常感谢 ELI5 的回复!提前致谢!
作为参考,这是我的自定义单元格:
import UIKit
class AllListItemsTableViewCell: UITableViewCell {
@IBOutlet var toggleIsSelected: UISwitch!
@IBOutlet var listItemLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
不要使用建议的协议/委托模式,而是使用回调。
这在 Swift.
在 table 视图单元格中声明一个带闭包的可选变量
var callback : ((UITableViewCell, Bool) -> Void)?
并在 IBAction
中为开关调用它
@IBAction func switchChanged(sender : UISwitch) {
callback?(self, sender.on)
}
在cellForRowAtIndexPath
设置回调
cell.callback = { (tableViewCell, switchState) in
if let indexPath = self.tableView.indexPathForCell(tableViewCell) {
// do something with index path and switch state
}
}
如果同时移动了单元格以获得最新的索引路径,则传回单元格可能很有用。