【问题标题】:Set object properties using a UISwitch in a custom cell在自定义单元格中使用 UISwitch 设置对象属性
【发布时间】:2017-01-20 12:23:38
【问题描述】:

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

我有一个ViewController,其中有一个TableView,其中包含从一组对象(称为allListItems)填充的自定义单元格。这些对象是使用Realm Model Object 创建的,我使用它而不是Core Data,我认为这可能是相关的。每个自定义单元格中都有一个UISwitch,理想情况下我想设置它,以便当用户切换UISwitch 时,它会修改该indexPath.row 的布尔值isSelected 属性,然后附加该属性对象到一个单独的数组,称为selectedListItems

我通过 SO、Tuts+ 和 AppCoda 进行的所有搜索都表明我应该在这里使用协议 - 委托模式,我的协议在我的自定义单元格类中,我的委托在我的 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
    }
}

【问题讨论】:

    标签: swift uiswitch


    【解决方案1】:

    使用回调代替建议的协议/委托模式。
    这在 Swift 中非常简单。

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

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

    如果同时移动单元格以获取最新的索引路径,则将单元格传回可能很有用。

    【讨论】:

    • 这正是我所需要的,非常感谢!现在我正在努力从selectedListItems 数组中删除项目,因为我使用的是indexOf,但如果我自己无法解决,那将是另一个 SO 问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    相关资源
    最近更新 更多