我是 Swift 的初学者,遇到了一个问题。
我有一个包含 3 个部分的 TableView 控制器,前两个部分由一个单元格中的一个文本字段组成。但是,对于开头的第三个单元格,它只有一个单元格(文本字段(。每次用户在文本字段上按 Return 键时,我都想在编辑的文本字段下方插入一行由一个文本字段组成的行。(例如,当您在"通讯录"应用中添加多个电话号码时(。
我创建了一个UITextField Array:TextFieldArrayPayers
我的代码看起来像这样:当用户按 Return 键时连接到文本字段:
@IBAction func AddParticipant(sender: AnyObject) {
tableView.beginUpdates()
textFieldArrayPayers.append(UITextField());
tableView.insertRowsAtIndexPaths([
NSIndexPath(forRow: textFieldArrayPayers.count, inSection: 2)
], withRowAnimation: .Automatic)
tableView.endUpdates()
}
并管理我的部分:
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 3
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if section==2
{
return textFieldArrayPayers.count+1
}
else
{
return 1;
}
}
当我运行我的程序时,我尝试编辑第一个文本字段,当我按 Enter 或 Return 时,我得到这个:
Terminating app due to uncaught exception 'NSRangeException',
reason: '*** -[__NSArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
我看了许多类似的主题,但从未找到真正的解决方案。
提前感谢那些获得解决方案的人
在开始批量更新之前更新模型:
@IBAction func AddParticipant(sender: AnyObject) {
textFieldArrayPayers.append(UITextField());
tableView.beginUpdates()
tableView.insertRowsAtIndexPaths([
NSIndexPath(forRow: textFieldArrayPayers.count, inSection: 2)
], withRowAnimation: .Automatic)
tableView.endUpdates()
}
有关 iOS 的表视图编程指南的更多信息