swift,从具有 CustomCells 的 tableViewCells 中检索更改的数据

swift, retrieve changed data from tableViewCells that have CustomCells

这个问题在很多地方都被问过几次了,但是理解和解决起来都非常困难。

我的问题不一样,我研究了5个多小时才问这个问题

我有一个 tableView,其中有 3 种不同类型的 CustomCell。

我的自定义单元格有 3 个东西,两个共同的标签和文本字段。第三项(步进器、按钮、开关)

我动态放置了 10 个调用

的单元格
 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

我理想中想做的事情->

当我的用户更改单元格上的数据时,我想获取所有 'updated' 数据,以便在单击 'Save' 时将其保存到我的数据库中。

我尝试使用

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

并使用断点,显然当我触摸单元格时代码块被触发。不幸的是,触摸的字面意思是触摸列表条目主体。

如果我使用自定义单元格中的 UI 项 (stepper/switch),则不会触发此代码部分。

我见过使用标签和委托的解决方案,但由于我是 iOS 的新手,我不确定如何实施或继续。我正在使用 Angela 的 Udemy iOS 课程自学。

自定义单元格

整体屏幕,我喜欢在用户更改文本字段值时获取它们

(已测试) 您好,我用来解决这个问题的一种方法是在您初始化 tableView 的子类之外添加处理函数。

    //.... This is your cellForRowAt tableView function..
    let cell = self.tableView.dequeueReusableCell(withIdentifier: cellId) as! cellSubclass
    cell.stepperButton.addTarget(self, action: #selector(handleStep(_:)), for: .valueChanged)
    return cell
}

@objc func handleStep(_ sender: UIStepper) {
    print(sender.value)
    let indexPath : IndexPath = IndexPath(item: 0, section: 0) 
    // Put the correct item # to locate where you have the stepper,
    // Then create a separate function doing the same thing, but with the item 
    // number of the next cell where you get the value from the switch
    let cell = tableView.cellForRow(at: indexPath) as! cellSubclass
    cell.textField.text = "\(Int(sender.value))"
}

您正在通过创建单元格的函数内部的 addTarget 方法连接 UIStepper。

这是我的结果图片:

提示:添加stepper.minimumValue = 0 当值 == 0 时,这将禁用 [-] 按钮。