2016-01-20 3 views
0

У меня есть UITableView, который получает свои данные из Parse. Это в основном как фид с сообщениями, UIMapView и UIImages. Некоторые сообщения имеют только текст, поэтому я составил 4 разных типа ячеек. Для всех разных комбинаций сообщений.Содержимое UITableViewCell исчезает после прокрутки

  1. Текст Один
  2. Изображение с текстом
  3. Изображение и карта с текстом
  4. Карта с текстом

После этого в моей функции cellForRowAtIndexPath, я получить все сообщения от разбора.

Это моя функция:

переопределение функ 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 в ранее упомянутых типах ячеек. Я застрял в этой проблеме часами, и я не могу понять это. Любая помощь приветствуется.

+2

Не деактивируйте 4 ячейки, как это в начале вашего метода, выясните, какой тип ячейки вам нужен, и удалите только эту ячейку. – dan

+1

Не устанавливайте 'rowHeight' вашего табличного представления в этом методе, реализуйте' tableView: heightForRowAtIndexPath: 'и возвращайте правильную высоту для строки там – dan

+1

не выполняйте асинхронные вызовы внутри вашего' cellForRowAtIndexPath' - получите данные за пределами этого когда представление загружается, а затем запускает перезагрузку таблицы, обращаясь к уже загруженным данным. – luk2302

ответ

0

При использовании tableViews Вы должны использовать Else условия для содержимого ячейки при повторном использовании ячейки, поэтому при прокрутке вверх по ней повторно используется ячейка. Это вызывает проблему.

Смежные вопросы