【发布时间】:2018-01-06 17:31:41
【问题描述】:
我对带有文本字段的自定义表格视图单元格有疑问。所以,我有一个带有文本字段的单元格的单独类,但我无法在我的 tableview 类中检索数据。 tableview 类和 textFieldShouldReturn 函数中有一个文本字段的委托,但是当我按下“完成”按钮时没有任何反应。哪里可能有问题?
非常感谢!
这是表格视图的代码:
class MainTVC: UITableViewController, UITextFieldDelegate{
var tableParts: [Dictionary<String, Any>] = []
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
tableParts = [
["type": "title", "data": "Some data", "enabled": true],
["type": "date", "data": "Some data", "enabled": true],
["type": "location", "data": "Loading...", "enabled": true],
]
tableView.reloadData()
}
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
}
override func numberOfSections(in tableView: UITableView) -> Int { return 1 }
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return tableParts.count }
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableParts[indexPath.row]
switch(cell["type"] as! String) {
...
case "textbox":
let rTemplateTextBox = tableView.dequeueReusableCell(withIdentifier: "recapTextCell", for: indexPath) as! RTextCell
rTemplateTextBox.textField.text = cell["data"] as? String ?? "No text"
rTemplateTextBox.data = cell
return rTemplateTextBox
default:
let cell = tableView.dequeueReusableCell(withIdentifier: "defCell", for: indexPath)
cell.textLabel?.text = "Unknown type of cell!"
return cell
}
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
print("Should return!")
return true
}
}
对于一个单元格:
class RTextCell: UITableViewCell, UITextFieldDelegate {
var textField = UITextField()
var data: Dictionary<String, Any>?
override func awakeFromNib() {
super.awakeFromNib()
textField.delegate = self
let padding = UIView(frame: CGRect(x:0, y:0, width: 15, height: self.frame.height))
textField = UITextField(frame: CGRect(x:0, y:0, width: self.frame.width, height: 40))
textField.placeholder = "Your text here"
textField.textColor = UIColor.white
textField.tintColor = UIColor.white
textField.backgroundColor = UIColor.clear
textField.leftView = padding
textField.leftViewMode = .always
self.addSubview(textField)
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
print("Should return")
return true
}
func textFieldDidEndEditing(_ textField: UITextField) {
if data != nil {
data!["data"] = textField.text
print("DATA: \(data!)")
} else {
print("No data")
}
}
}
【问题讨论】:
-
请包含您的
UITableViewCell子类和tableview 控制器类的相关代码。 -
@Cheslav 我认为我的回答解决了你的问题
-
您在 RTextCell 类中设置 textfield.delegate。所以 textFieldShouldReturn 只能在那个类中工作。您将在哪里使用文本字段的数据。请解释一下?
-
@AadilAli 我想在我的 tableview 类中使用字段的文本,有一个字典,我想用每个文本字段的数据填充它。每个单元格中会有很多文本字段。
-
“完成”按钮是您单元格的一部分吗?
标签: ios iphone swift uitableview uitextfield