ios - 如何从自定义单元格类更改数据源

标签 ios swift uitableview oop

这应该是直截了当的,但我发现很难理解。 我有课

class Field:NSObject {
    var name:String?
    var answer:String?
    .................
}

现在我还有一个 View Controller ,其中有一个 TableView 。我使用 Field 数组作为此表格 View 的数据源。我将相关对象从 Field 数组传递到我的自定义单元格类(见下文),它有一个 UItextfield 。

cell.field = self.fields[indexPath.row]

我想要的是,当 UItextfield 中的文本发生更改时,这应该更新我们的主 Field 数组。此外,自定义单元类应该具有 Field 实例的新副本。我希望我已经说清楚了,如果有什么不明白的地方请询问。非常感谢。

这是单元类代码

class SpeechCell: UITableViewCell, UITextFieldDelegate {
public var field:Field?{
    didSet{
        self.lblField.text = self.field?.name
        self.txtAnswer.placeholder = self.field?.name
    }
}

func textFieldDidEndEditing(_ textField: UITextField, reason: UITextFieldDidEndEditingReason) {
    self.field?.answer = textField.text!
    self.commandDelegate?.didUpdateField(field: self.field!, textField: textField)
}

override func prepareForReuse() {
    self.txtAnswer.text = self.field?.answer
}

这是表格 View 的代码

func didUpdateField(field: Field, textField: UITextField) {
    self.fields[textField.tag].answer = textField.text!
}

最佳答案

您应该使用自定义委托(delegate)方法来通知 View Controller 有关文本字段中的更改。在自定义委托(delegate)方法中,您应该更新 fields 数组。在调用自定义委托(delegate)方法之前,您还应该更改单元格中的字段

您应该在 textFieldDidChangeText 中调用此委托(delegate)方法。

关于ios - 如何从自定义单元格类更改数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48825618/

相关文章:

swift - 如何在 IOS 10 中创建动画作为 iMessage 的动画?

swift - Rx swift : Append elements to Observable<[_]>

ios - Popup VC 显示在单元格上而不是 tableView 上

ios - 如何找出 UILabel wordwraps 的时间

ios - 如何使用 "Outlets cannot be connected to repeating content"解决此错误?

iOS 10 - 更改相机、麦克风和照片库的权限导致应用程序崩溃

core-data - 将图像存储在核心数据中还是作为文件?

ios - UIScrollView 损坏并停止使用 OpenGL 渲染滚动(相关 CADisplayLink、NSRunLoop)

IOS:在后台单击时删除 View

swift - 将 FirebaseData 传递到 tablviewCell 时出现 fatal error : Index out of range,