将动态文本字段单元格插入TableView - Swift中的部分

时间:2016-02-15 21:57:21

标签: ios iphone swift uitableview uitextfield

我是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]'

我查看了许多类似的主题,但从未找到真正的解决方案..

提前感谢那些获得解决方案的人

1 个答案:

答案 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