在UITableView中添加Duplicate行的insertRowsAtIndexPaths

时间:2015-07-23 18:38:31

标签: ios swift uitableview uiview swift2

我使用insertRowsAtIndexPaths方法向我的UITableView添加新行。存在添加重复行的问题。

例如,如果我键入"HI"然后触摸return,则会在表格中添加一个文本为"HI"的行。如果我然后返回并键入"Hello"并按返回,则会再次添加一行"HI"。这是一些代码:

func textFieldShouldReturn(textField: UITextField) -> Bool {

    sendMessage(textField.text)
    return true
}

func sendMessage(text:String){

    var message = Message(text: text)
    //global array that stores all the messages
    self.messages.append(message)

    let indexPathZero : NSIndexPath = NSIndexPath(forRow: 0, inSection: 0)

    self.tableView.beginUpdates()
    self.tableView.insertRowsAtIndexPaths(NSArray(object: indexPathZero) as [AnyObject], withRowAnimation: UITableViewRowAnimation.None)
    self.tableView.endUpdates()

}

非常感谢!

  

修改:此处为cellForRowAtIndexPath代码

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell:GroupChatMessageCell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! GroupChatMessageCell
    cell.message.text = messages[indexPath.row].text
    cell.contentView.transform = CGAffineTransformMakeScale (1,-1);

    return cell
}

2 个答案:

答案 0 :(得分:1)

似乎您要将新消息附加到数组末尾,但在第一行插入新行。所以它要求func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell

中的第一个数组元素

可以通过将self.messages.append(message)更改为self.messages.insert(message, atIndex: 0)

来修复

答案 1 :(得分:0)

实现estimatedHeightForRowAtIndexPath做的伎俩!

-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
return [self tableView:tableView heightForRowAtIndexPath:indexPath];
}

享受;)