我有一个 UITableView
有2个部分。
每个部分都有不同的xib单元格(有多个文本字段、单选按钮等)。
用户可以使用键盘输入这些值。
如何使用模型获取提交按钮上各文本字段的值?
以下是我的单元格模型类 详解:
class DataModel {
var name: String?
var gender: String?
init(name: String?, gender: String?)
{
self.name = name
self.gender = gender
}
}
我如何在我的tableview中使用它。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier:"DetailCell") as? DetailCell
if cell == nil{
let arrNib:Array = Bundle.main.loadNibNamed("DetailCell",owner: self, options: nil)!
cell = arrNib.first as? DetailCell
}
let model: DataModel
model = DataModel [indexPath.row]
//displaying values
cell?.name_lbl.text = model.name
cell?.gender_lbl.text = model.gender
return cell!
}
首先,你的name_lbl和gender_lbl应该是UITextField,而不是UILabel.你必须为name_lbl和gender_lbl添加目标。
cell?.name_lbl.text = model.name
cell?.name_lbl.tag = indexPath.section
cell?.name_lbl.addTarget(self, action: #selector(textFieldNameDidChange(_:)), for: UIControl.Event.editingChanged)
cell?.gender_lbl.text = model.gender
cell?.name_lbl.tag = indexPath.section
cell?.name_lbl.addTarget(self, action: #selector(textFieldGenderDidChange(_:)), for: UIControl.Event.editingChanged)
你必须为name_lbl和gender_lbl添加目标,并添加方法textFieldNameDidChange和textFieldGenderDidChange为。
@objc func textFieldGenderDidChange(sender: UITextField) {
var model = DataModel[sender.tag]
model.gender = sender.text
}
你应该为 "name "添加同样的方法。
你可以给textfield加上标签,然后使用UITextFieldDelegate来实现这个功能,比如。
func textFieldDidEndEditing(_ textField: UITextField) {
if textField.tag == 0 {
model.name = textField.text ?? ""
}
}
在您的提交按钮上,您可以访问模型值,如
@IBAction func submitButtonTapped(_ sender: Any) {
self.view.endEditing(true)
let name = model.name
}
为此,你需要将标签设置为行单元格中的文本字段,在shouldChageCharacter委托方法中,将文本设置为带有各自indexpath的数据数组,并创建uitableviewcell对象,将文本设置为相应的标签。在shouldChageCharacter delegate方法中,将文本设置为带有各自indexpath的数据数组,并创建uitableviewcell对象,将文本设置为各自的标签。在上面的答案中,如果你滚动表格,那么TableCell会相互混合。