滚动后UITableViewCell内容消失

时间:2016-01-20 18:31:40

标签: ios iphone swift uitableview

我有一个UITableView从Parse获取数据。它基本上就像一个包含消息帖子,UIMapView和UIImages的feed。有些帖子只有文字,所以我组成了4种不同的细胞类型。对于所有不同的帖子组合。

  1. 单独文字
  2. 带文字的图片
  3. 带文字的图像和地图
  4. 使用文字地图
  5. 之后,在我的cellForRowAtIndexPath函数中,我从Parse中检索所有消息。

    这是我的功能:

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

        let cell:MessageTableViewCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as? MessageTableViewCell
        let cell2:FullTableViewCell! = tableView.dequeueReusableCellWithIdentifier("AllCell", forIndexPath: indexPath) as? FullTableViewCell
        let cell3:ImageTableViewCell! = tableView.dequeueReusableCellWithIdentifier("ImageCell", forIndexPath: indexPath) as? ImageTableViewCell
        let cell4:MapTableViewCell! = tableView.dequeueReusableCellWithIdentifier("MapCell", forIndexPath: indexPath) as? MapTableViewCell
    
        var typeOfCell = ""
    
            if(self.feedData.count > indexPath.row){
    
                if let message:PFObject = (self.feedData[indexPath.row] as? PFObject)!{
                    long = message.objectForKey("LocationLongitude") as! Double
                    lat = message.objectForKey("LocationLatitude") as! Double
    
                    if let userImageFile = message["Photos"]{
                        userImageFile.getDataInBackgroundWithBlock {
                            (imageData: NSData?, error: NSError?) -> Void in
                            if error == nil {
                                let imageData = imageData
                                let image = UIImage(data:imageData!)
                                if(self.long != 0 || self.lat != 0){
                                    //ALL INCLUDED
    
                                    cell2.imgView.image = image
                                    cell2.txtMessage.text = message.objectForKey("Message") as? String
                                    cell2.txtMessage.font = UIFont(name: "Baskerville", size: 18)
                                    let dataFormatter:NSDateFormatter = NSDateFormatter()
                                    dataFormatter.dateFormat = "H:mm - MM-dd-yyyy"
                                    cell2.lblDate.text = dataFormatter.stringFromDate(message.createdAt!)
                                    typeOfCell = "FullCell"
    
                                }else{
                                    //ONLY IMAGE
                                    cell3.imgView.image = image
                                    cell3.txtMessage.text = message.objectForKey("Message") as? String
                                    cell3.txtMessage.font = UIFont(name: "Baskerville", size: 18)
                                    let dataFormatter:NSDateFormatter = NSDateFormatter()
                                    dataFormatter.dateFormat = "H:mm - MM-dd-yyyy"
                                    cell3.lblDate.text = dataFormatter.stringFromDate(message.createdAt!)
                                    //typeOfCell = "ImageCell"
                                }
                            }
                        }
    
                    }else{
                        if(self.long != 0 || self.lat != 0){
                            //MAPVIEW
                            cell4.txtMessage.text = message.objectForKey("Message") as? String
                            cell4.txtMessage.font = UIFont(name: "Baskerville", size: 18)
                            let dataFormatter:NSDateFormatter = NSDateFormatter()
                            dataFormatter.dateFormat = "H:mm - MM-dd-yyyy"
                            cell4.lblDate.text = dataFormatter.stringFromDate(message.createdAt!)
                            typeOfCell = "MapCell"
                        }else{
                            //ONLY TEXT
                            cell.txtMessage.text = message.objectForKey("Message") as? String
                            cell.txtMessage.font = UIFont(name: "Baskerville", size: 18)
                            let dataFormatter:NSDateFormatter = NSDateFormatter()
                            dataFormatter.dateFormat = "H:mm - MM-dd-yyyy"
                            cell.lblDate.text = dataFormatter.stringFromDate(message.createdAt!)
                            typeOfCell = "Cell"
                        }
                    }
                }
        }
                if(typeOfCell == "FullCell"){
                    self.tableView.rowHeight = 861.00
                    print("FullCell")
                    return cell2
                }else if(typeOfCell == "Cell"){
                    print("Cell")
                    self.tableView.rowHeight = 133.00
                    return cell
                }else if(typeOfCell == "MapCell"){
                    print("MapCell")
                    self.tableView.rowHeight = 269.00
                    return cell4
                }else{
                    print("ImageCell")
                    self.tableView.rowHeight = 725.00
                    return cell3
                }
    

    }

    到目前为止一切顺利。然而,当我运行我的应用程序时,只有第一个单元格显示图像(如果有的话),其余的则不显示。此外,当我尝试在TableView中滚动时,我的所有图像都会消失。所以基本上我只能查看两种类型的细胞。在前面提到的单元格类型中键入1或类型4。几个小时以来我一直坚持这个问题,我似乎无法弄明白。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

使用tableViews时,您应该使用Else条件来重复使用单元格,因此当您向下滚动时,它会重复使用单元格。这导致了问题。