Swift Pass/Save 自定义单元格内 TextView 中的文本并使文本在单元格重用后不消失
Swift Pass/Save Text From TextView Inside CustomCell & Make The Text Not Disappear After Cell Resuse
我很难找到或想到一种可以存储 textView 文本的方法。
所以稍后我可以根据需要将它传回服务器。
我在 CustomCell UITableViewCell 中有一个 TextView。 (我的 tableview 中有 2 个部分,每个部分中都有一个带有 textView 的自定义单元格。)
我需要以某种方式传递或保存用户编写的文本,以便我可以提取该文本并将其发送到其他地方......每次我的“可重用”单元格中的文本被重用时,文本都会消失。
我试图将它保存在我的 customCell Swift 中,但我认为将文本保存在 customCell 文件中不是一个好主意。
有人知道吗?
谢谢!
在实现 tableView 时,我们应该确保有一些数据驱动的数据源。我的意思是创建一个模型来驱动您的 tableView 的 numberOfSections、numberOfRowsInSection 等。这样您就可以在模型中有一个 属性 来存储 textView 的文本。
示例模型:
struct TableViewModel {
// this will handle number of sections
var sections: [TableViewSectionModel]
}
struct TableViewSectionModel {
// this will handle number of rows
var rows: [TableViewRowModel]
}
struct TableViewRowModel {
var textViewText: String
/*
Other properties to fill in
*/
}
使用它你可以像这样创建你的数据模型:
var cell1 = TableViewRowModel(textViewText: "")
var cell2 = TableViewRowModel(textViewText: "")
var section1 = TableViewSectionModel(rows: [cell1, cell2])
var section2 = TableViewSectionModel(rows: [cell1, cell2])
var data = TableViewModel(sections: [section1, section2])
这将有助于更新模型中的 属性,您可以稍后将数据传递给后端。
第一步:
创建一个模型来填充单元格。
struct myModel {
let textFromCustomCell: string = ""
}
创建模型列表(以填充表格视图)
第二步:
这有几种方法,但我选择了委托方法。
使您的 CustomCell 符合 UITextViewDelegate。
在 CustomCell 上保存 indexPath 变量:
var indexPath: 索引路径?
在单元格上实现此 UITextview 委托方法:
func textViewDidChange(textView: UITextView)
在单元格 awakeFromNib 中设置 textView 委托:
override func awakeFromNib() {
super.awakeFromNib()
textField.delegate = self
}
5.Create 一个 CustomCellDelegate:
protocol CustomCellDelegate: AnyObject {
func cellTextDidChanges(indexPath: IndexPath, text: String)
}
需要时在单元格上调用此函数(可能在单元格上的 textViewDidChange 函数实现内部)。
使持有 tableview 的 viewControlller 符合您的 CustomCellDelegate
在您的 viewControlller 上实施 CustomCellDelegate cellTextDidChanges 方法
在 cellTextDidChanges 实现中,您应该根据 indexPath 在您创建的模型列表中更新正确的模型文本。
请记住第一次填充表格视图时文本将为空。
我很难找到或想到一种可以存储 textView 文本的方法。 所以稍后我可以根据需要将它传回服务器。
我在 CustomCell UITableViewCell 中有一个 TextView。 (我的 tableview 中有 2 个部分,每个部分中都有一个带有 textView 的自定义单元格。) 我需要以某种方式传递或保存用户编写的文本,以便我可以提取该文本并将其发送到其他地方......每次我的“可重用”单元格中的文本被重用时,文本都会消失。 我试图将它保存在我的 customCell Swift 中,但我认为将文本保存在 customCell 文件中不是一个好主意。 有人知道吗? 谢谢!
在实现 tableView 时,我们应该确保有一些数据驱动的数据源。我的意思是创建一个模型来驱动您的 tableView 的 numberOfSections、numberOfRowsInSection 等。这样您就可以在模型中有一个 属性 来存储 textView 的文本。
示例模型:
struct TableViewModel {
// this will handle number of sections
var sections: [TableViewSectionModel]
}
struct TableViewSectionModel {
// this will handle number of rows
var rows: [TableViewRowModel]
}
struct TableViewRowModel {
var textViewText: String
/*
Other properties to fill in
*/
}
使用它你可以像这样创建你的数据模型:
var cell1 = TableViewRowModel(textViewText: "")
var cell2 = TableViewRowModel(textViewText: "")
var section1 = TableViewSectionModel(rows: [cell1, cell2])
var section2 = TableViewSectionModel(rows: [cell1, cell2])
var data = TableViewModel(sections: [section1, section2])
这将有助于更新模型中的 属性,您可以稍后将数据传递给后端。
第一步: 创建一个模型来填充单元格。
struct myModel {
let textFromCustomCell: string = ""
}
创建模型列表(以填充表格视图)
第二步: 这有几种方法,但我选择了委托方法。
使您的 CustomCell 符合 UITextViewDelegate。
在 CustomCell 上保存 indexPath 变量:
var indexPath: 索引路径?
在单元格上实现此 UITextview 委托方法:
func textViewDidChange(textView: UITextView)
在单元格 awakeFromNib 中设置 textView 委托:
override func awakeFromNib() { super.awakeFromNib() textField.delegate = self
}
5.Create 一个 CustomCellDelegate:
protocol CustomCellDelegate: AnyObject {
func cellTextDidChanges(indexPath: IndexPath, text: String)
}
需要时在单元格上调用此函数(可能在单元格上的 textViewDidChange 函数实现内部)。
使持有 tableview 的 viewControlller 符合您的 CustomCellDelegate
在您的 viewControlller 上实施 CustomCellDelegate cellTextDidChanges 方法
在 cellTextDidChanges 实现中,您应该根据 indexPath 在您创建的模型列表中更新正确的模型文本。
请记住第一次填充表格视图时文本将为空。