我是Swift的初学者,我遇到了问题。
我有一个包含3个部分的TableView控制器,前两个部分由一个单元格中的一个文本字段组成。 但是,对于开头的第三个,它只有一个单元格(textfield)。 每次用户在文本字段上按Return键时,我想在编辑的文本字段下面插入一个由一个文本字段组成的行。 (就像在联系人应用程序中添加多个电话号码一样)。
我创建了一个UITextField数组:TextFieldArrayPayers
我的代码如下所示: 当用户按下Return:
时连接到textField@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]'
我查看了许多类似的主题,但从未找到真正的解决方案..
提前感谢那些获得解决方案的人
答案 0 :(得分:0)
在开始批量更新之前更新您的模型:
@IBAction func AddParticipant(sender: AnyObject) {
textFieldArrayPayers.append(UITextField());
tableView.beginUpdates()
tableView.insertRowsAtIndexPaths([
NSIndexPath(forRow: textFieldArrayPayers.count, inSection: 2)
], withRowAnimation: .Automatic)
tableView.endUpdates()
}
有关详细信息,请参阅Table View Programming Guide for iOS