I have a problem with custom tableview cell with a textfield. So, I have a separate class for a cell with a textfield, but I can't retrieve data in my tableview class. There is a delegate for textfield in tableview class and textFieldShouldReturn function but nothing happens when I press "Done" button. Where can be a problem?
Thanks a lot!
Here's a code for Table View:
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 } } And for a cell:
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") } } }
UITableViewCellsubclass and your tableview controller class.