从UITableViewCell中的UITextField获取数据

我已经crating这个tableview来获取用户的子名称,并将其存储到一个名为dependentsArray的数组中:

在这里输入图像说明

我已经通过stackoverflow,苹果文档,谷歌和YouTube教程search,似乎无法find一个解决scheme。 这似乎应该是简单的,但它造成相当头痛。 我发现最接近的解决scheme是这个职位:

从每个UITableView Cells Swift获取数据

但是,我没有通过点击它们获取单元格textfield值,所以我不能使用didDeselectRowAtIndexPath 。 我希望获得文本值,当我点击“下一步”button。

tableview基于一个名为dependentsCount的整数扩展和缩小它的单元格数。 我递增和递减dependentsCount像这样:

  @IBAction func subtractDependentButtonClick(sender: AnyObject) { dependentsCount -= 1 dependentsTableView.reloadData() fadeTransition(0.3) } @IBAction func addDependentButtonClick(sender: AnyObject) { dependentsCount += 1 dependentsTableView.reloadData() fadeTransition(0.3) } 

iive试图获得文本字段值的方式如下:

  @IBAction func nextButtonPress(sender: AnyObject) { var index = 0 var cell = self.dependentsTableView.cellForRowAtIndexPath(NSIndexPath(index: index)) as! DependentsTableViewCell while index < dependentsCount { self.dependentsArray.append(cell.nameTextField.text!) index += 1 } self.performSegueWithIdentifier("showNextVC", sender: nil) } 

哪个应用程序崩溃^^

  func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { let cell = dependentsTableView.dequeueReusableCellWithIdentifier("Cell") as! DependentsTableViewCell dependentsArray.append(cell.nameTextField.text!) print("\(dependentsArray)") } 

它什么都不做^^

什么是正确的方式来获得tableview单元格的文本字段文本?

我会build议你尝试一下,就像我在这个要点写的东西(源代码是交互式操场 )。

简而言之,我build议为您的数据引入一个模型

 class Model { let placeholder: String? var text: String? init(placeholder: String?, text: String? = nil) { self.placeholder = placeholder self.text = text } } 

然后制作一个模型列表来实际存储数据:

 // Sample items. let items = [ TextFieldCell.Model(placeholder: "1"), TextFieldCell.Model(placeholder: "2"), TextFieldCell.Model(placeholder: "3", text: "xxx"), TextFieldCell.Model(placeholder: "4"), TextFieldCell.Model(placeholder: "5"), TextFieldCell.Model(placeholder: "6") ] 

并通过适当的数据源将可见单元连接到相应的模型。

细胞可能是这样的:

 class TextFieldCell: UITableViewCell, SmartCell, UITextFieldDelegate { var model: Model? { didSet { textField.placeholder = model?.placeholder textField.text = model?.text } } let textField = UITextField() required init?(coder: NSCoder) { super.init(coder: coder) commonInit() } override init(style: UITableViewCellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) commonInit() } private func commonInit() { contentView.addSubview(textField) textField.delegate = self } override func layoutSubviews() { textField.frame = contentView.bounds.insetBy(dx: 15, dy: 8) } func loadModel(m: Model) { model = m } func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { let text = (textField.text as NSString?)?.stringByReplacingCharactersInRange(range, withString: string) // Update the model. model?.text = text return true } } 

之后,您可以随时从模型列表中读取用户input的数据。

在互动的iOS游乐场里玩耍!

更新的答案,新的didDeselectRowAtIndexPath

 func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { if let textView = self.view.viewWithTag(indexPath.row) as? UITextField { dependentsArray.append(textView.text!) } print("\(dependentsArray)") } 

并把它放在cellForRowAtIndexPath里面

 cell.nameTextField.tag = indexPath.row