我已经创建了这个tableview以获取用户子项的名称,并将它们存储到名为dependentsArray
的数组中:
我搜索了stackoverflow,Apple文档,google和youtube教程,似乎无法找到解决方案。这似乎应该很简单,但它引起了很大的麻烦。我发现最接近解决方案的是这篇文章:
getting data from each UITableView Cells Swift
但是,我没有通过点击它来获取单元格文本字段值,因此我无法使用didDeselectRowAtIndexPath
。我希望在点击"下一步"时获取文本值。按钮。
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)
}
我试图获取文本字段值的方式如下:
@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单元格的文本字段文本的正确方法是什么?
答案 0 :(得分:2)
我建议你试试我在this gist为你写的内容(来源是interactive playground)。
简单地说,我建议为您的数据引入模型:
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
}
}
之后,您可以随时从模型列表中读取用户输入的数据。
在互动式iOS游乐场中使用 the gist 进行游戏!
答案 1 :(得分:0)
更新了答案,新 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