如何将 Switch 状态绑定到 Swift 中的对象?
How to bind Switch state to an object in Swift?
在我的应用程序中,我有一个开关,我希望它成为保存图像的指示器。现在我只有一个按钮可以保存所有图像。
举个例子更有意义
我尝试过的:
func saveTapped() {
let cell = collectionView?.cellForItem(at: indexPath) as! CustomCell
for image in images where cell.savingSwitch.isOn {
...
但我无法访问 indexPath。我应该如何调用此 Save 方法以访问我的 collectionView 中的特定行?或者有别的办法吗?
首先,您需要一种方法来将 "save" 设置与 table 中的每个图像一起存储,例如通过将图像和标志保存在结构中:
struct TableEntry {
let image: UIImage
var save = false
}
并在 table 视图的数据源中使用 var images: [TableEntry]
。
然后您可以使用每个 UISwitch 的 tag
属性 来存储它所在的行,例如在
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(...)
cell.switch.tag = indexPath.row
cell.switch.isOn = self.images[indexPath.row].save
cell.imageView.image = self.images[indexPath.row].image
return cell
}
然后在开关值更改时调用的方法中使用标记,以了解引用了哪个图像:
@IBAction func switchChanged(_ sender: UISwitch) {
self.images[sender.tag].save = sender.isOn
}
func saveTapped() {
let imagesToSave = self.images.filter { [=12=].save }
}
在您的 CustomCell
中,您可以添加一个闭包,当 switch
状态发生如下变化时触发,
class CustomCell: UITableViewCell {
var onSwitchStateChange: ((Bool) -> Void)?
@IBAction func switchTapped(_ sender: UISwitch) {
self.onSwitchStateChange?(sender.isOn)
}
}
然后您可以像下面这样更新您的 cellForRowAt
,
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
cell.onSwitchStateChange = { state in
guard state else { return }
let image = images[indexPath.row]
// Upload Image
}
}
在我的应用程序中,我有一个开关,我希望它成为保存图像的指示器。现在我只有一个按钮可以保存所有图像。
举个例子更有意义
我尝试过的:
func saveTapped() {
let cell = collectionView?.cellForItem(at: indexPath) as! CustomCell
for image in images where cell.savingSwitch.isOn {
...
但我无法访问 indexPath。我应该如何调用此 Save 方法以访问我的 collectionView 中的特定行?或者有别的办法吗?
首先,您需要一种方法来将 "save" 设置与 table 中的每个图像一起存储,例如通过将图像和标志保存在结构中:
struct TableEntry {
let image: UIImage
var save = false
}
并在 table 视图的数据源中使用 var images: [TableEntry]
。
然后您可以使用每个 UISwitch 的 tag
属性 来存储它所在的行,例如在
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(...)
cell.switch.tag = indexPath.row
cell.switch.isOn = self.images[indexPath.row].save
cell.imageView.image = self.images[indexPath.row].image
return cell
}
然后在开关值更改时调用的方法中使用标记,以了解引用了哪个图像:
@IBAction func switchChanged(_ sender: UISwitch) {
self.images[sender.tag].save = sender.isOn
}
func saveTapped() {
let imagesToSave = self.images.filter { [=12=].save }
}
在您的 CustomCell
中,您可以添加一个闭包,当 switch
状态发生如下变化时触发,
class CustomCell: UITableViewCell {
var onSwitchStateChange: ((Bool) -> Void)?
@IBAction func switchTapped(_ sender: UISwitch) {
self.onSwitchStateChange?(sender.isOn)
}
}
然后您可以像下面这样更新您的 cellForRowAt
,
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
cell.onSwitchStateChange = { state in
guard state else { return }
let image = images[indexPath.row]
// Upload Image
}
}