更新tableview时在哪里调用reloadData?

时间:2015-06-16 18:10:40

标签: ios swift uitableview

我对快速编程很新,所以可能会问你一个基本的问题,但我需要知道的事情。

我有一个实现,我可以说与机器人聊天。所以控制流程是这样的:

我说“嗨”这必须反映在“聊天”框中,然后从网络服务返回的响应也必须成为聊天消息。

显然,我的消息和来自Web服务的其他响应应该是不同的颜色和样式,我在tableView函数中这样做。

这是我的tableView代码

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell:tblCell = tblCell()
    let font = UIFont(name:"Helvetica" , size: 14)

    if(tableView.isEqual(messageTableView)) {
        var chatMessage:ChatMessage =  self.messageArray[indexPath.row]
        cell=self.messageTableView.dequeueReusableCellWithIdentifier("MessageCell") as! tblCell
        dispatch_async(dispatch_get_main_queue()) {
        //Determining the size of the chat box
            cell.messageText.sizeToFit()
            cell.messageText.text = chatMessage.message
            cell.messageText.numberOfLines = 0
            cell.messageText.font = font
            var frame: CGRect = cell.messageText.frame
            cell.messageText.layer.cornerRadius = 10
            cell.messageText.layer.masksToBounds = true

            //if it is a user input message use this
            if(chatMessage.messageType == "user") {
                cell.messageText.textAlignment = NSTextAlignment.Right
                cell.messageText.backgroundColor = self.UIColorFromRGB(0x0099FF)
                cell.messageText.textColor = UIColor.whiteColor()

                //code to right align the label
                if(frame.width <= 148) {
                    frame.origin.x = 148 - frame.width
                }
                else {
                    frame.origin.x = 0
                }
                cell.messageText.frame = frame

            } else if(chatMessage.messageType == “bot”) {
                cell.messageText.textAlignment = NSTextAlignment.Left
                cell.messageText.backgroundColor = UIColor.lightGrayColor()
            }
            var size:CGSize = CGSize(width: frame.width + 20, height: frame.height + 20)
            cell.messageText.sizeThatFits(size)

            if tableView.contentSize.height > tableView.frame.size.height  && self.shouldScrollToLastRow {
                let offset = CGPoint(x: 0, y: tableView.contentSize.height - tableView.frame.size.height)
                tableView.setContentOffset(offset, animated: false)
                self.shouldScrollToLastRow = false
            }
        }
        return cell
    }        
    return cell
}

现在我遇到了邮件大小的问题,因为它不会一直返回正确的大小。意思是,当我向上和向下滚动时,盒子的大小不断变化。

我认为问题出在reloadData()上,我不知道应该在哪里调用它。

请注意,我写了一个异步请求解析代码,并根据请求的响应更新聊天。

我做错了什么?

请帮忙

尼基尔

0 个答案:

没有答案