我目前正在学习如何完全以编程方式构建应用程序,并且在此过程中遇到了一些困难。
我的应用程序将是一种非常简单的表单,用户可以填写,并且它将在末尾生成包含信息的PDF。对于基本信息,我有一个包含一组UITextfields的tableview,并且遍历它们并将数据提取到字符串数组中没有问题。
在下一节中,用户需要输入更多文本,因此我在tableview中使用了UITextviews。我想要做的是提取输入的文本并将其保存到用于创建客户对象的字符串数组中。执行此操作的代码如下:
func createGoals() {
for section in 0..<secondTableView.numberOfSections {
for row in 0..<secondTableView.numberOfRows(inSection: section) {
let indexPath = NSIndexPath(row: row, section: section)
let thisCell = secondTableView.cellForRow(at: indexPath as IndexPath) as! mySecondCell
if thisCell.textview.text == "Enter Goals" {
print("NO CONTENT IN FIELD")
let ac = UIAlertController(title: "But...But...", message: "If you have no goals, how can you progress?!", preferredStyle: .alert)
ac.addAction(UIAlertAction(title: "OK", style: .default))
present(ac, animated: true)
break
} else {
print("I MADE IT")
print("\(thisCell.textview.text!)")
newClient.goalArray.append(thisCell.textview.text)
print(newClient.goalArray)
}
}
}
}
但是,当它运行时,我收到错误消息“在展开一个可选值时意外发现nil”,并且它特别突出显示了这一行:
let thisCell = secondTableView.cellForRow(at: indexPath as IndexPath) as! mySecondCell
这段代码几乎与我成功遍历UITextfields的方式相同,所更改的只是附加的变量,据我所知,没有可选的变量。
另外,如果我不填写UITextviews,它将显示UIAlertController,仅当我删除占位符并填写UITextviews时,才出现问题。
有谁知道为什么会这样吗?如果需要,我可以提供更多代码。
最佳答案
在这里,您正在迭代中加载单元。造成此问题是因为您要加载/访问不可见的单元格。
在这里,您不应将单元格加载到cellForRowAtIndexPath之外。
原因:UITableView正在使用reusableCellIdentifier重用单元格。
在这里,当调用textfield-didEndEditing(文本字段委托方法)时,需要将值保存在数组或字典中。
对于验证检查,您可以使用数组/字典中保存的值。
关于ios - 使用Swift遍历tableview中的UITextViews,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42272422/