swift - 在自定义单元格中使用 UISwitch 设置对象属性

标签 swift uiswitch

我正在尝试做一些应该非常简单的事情,但由于我对 Swift 缺乏经验,我遇到了问题。

我有一个 ViewController,其中有一个 TableView,其中包含由对象数组(称为 allListItems)填充的自定义单元格。这些对象是使用领域模型对象创建的,我使用的是领域模型对象,而不是我认为可能相关的核心数据。每个自定义单元格中都有一个 UISwitch ,理想情况下我想对其进行设置,以便当用户切换 UISwitch 时,它会修改 bool 值 isSelected indexPath.row 属性,然后将该对象附加到一个名为 selectedListItems 的单独数组。

我对 SO、Tuts+ 和 AppCoda 的所有搜索都表明我应该在此处使用协议(protocol) - 委托(delegate)模式,其中我的协议(protocol)位于我的自定义单元类中,我的委托(delegate)位于我的 ViewController 类中。然而,在大半天的努力之后,我没有任何运气,我认为这可能是由于数组是领域模型对象。

正如我所提到的,我对 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
    }
}

最佳答案

使用回调代替建议的协议(protocol)/委托(delegate)模式。
这在 Swift 中非常容易。

在 TableView 单元格中声明一个带有闭包的可选变量

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 - 在自定义单元格中使用 UISwitch 设置对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39460904/

相关文章:

iphone - 如何检索 UISwitch 的 UITableView 行号?

swift - 使用 SwiftyXMLParser Alamofire 解析 XML

swift - 如何允许用户仅打开以编程方式构建的单个 uiSwitch 并存储开关的数据

iPhone - 将 UISwitch 上的文本从 "ON/OFF"更改为 "TRUE/FALSE"?

ios - 在 UITableViewCell 中让 UISwitch 获得点击然后 accessoryView 如果开关打开

ios - 按下时如何使 textView 位于键盘顶部?

iphone - Swift Web 应用程序 : iPhone keyboard, 顶部栏和布局

objective-c - 如何在 Objective-C 中添加观察者并在 Swift 3 中触发通知

ios - 将 swift 1.2 代码转换为 swift 2 : Missing argument label in call

objective-c - Xcode 为什么我的 UISwitch 一段时间后不起作用?