簡體   English   中英

Tableview數組未在iOS Swift中正確加載?

[英]Tableview array is not loaded properly in iOS Swift?

我正在使用聊天應用程序。 將發送方和接收方消息保存到Firebase。 嘗試將數組消息加載到TableView ,消息未完全加載。 它顯示剩余消息的間隔。

MainChatViewController.swift

var messages = [Message]()

func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return messages.count   
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    print("message count::\(messages.count)")

    let message = messages[indexPath.row]

    if let cell = chatTableView.dequeueReusableCell(withIdentifier: "Message") as? mainChatScreenTableViewCell {
        cell.tag = indexPath.row
        cell.configCell(message: message)
        return cell
    } else {
        return mainChatScreenTableViewCell()
    }
}

func loadData() {

 Database.database().reference().child("messages").child(messageId)
.observe(.value, with: { (snapshot) in

        if let snapshot = snapshot.children.allObjects as? [DataSnapshot] {

            self.messages.removeAll()

            for data in snapshot {

                if let postDict = data.value as? Dictionary<String, AnyObject> 
  {

                    let key = data.key

                    let post = Message(messageKey: key, postData: postDict)

                    self.messages.append(post)
                }
            }
        }

        self.chatTableView.reloadData()
    })

}//loadData

func moveToBottom() {
    DispatchQueue.main.async {
        if self.messages.count > 0  {
            let indexPath = IndexPath(row: self.messages.count - 1, section: 0)
            self.chatTableView.scrollToRow(at: indexPath, at: .bottom, animated: false)
        }
    }
}

mainChatScreenTableViewCell

import UIKit
import SwiftKeychainWrapper
import Firebase
import FirebaseStorage
import FirebaseDatabase

class mainChatScreenTableViewCell: UITableViewCell {


@IBOutlet weak var recievedMessageLbl: UILabel!

@IBOutlet weak var recievedMessageView: UIView!

@IBOutlet weak var sentMessageLbl: UILabel!

@IBOutlet weak var sentMessageView: UIView!

@IBOutlet var receivedTimeLabel: UILabel!

@IBOutlet var sentTimeLabel: UILabel!

@IBOutlet var likeOrUnlikeImageView: UIImageView!

@IBOutlet var errorImageView: UIImageView!


@IBOutlet var checkImage: UIImageView!

var message: Message!
var currentUser = KeychainWrapper.standard.string(forKey: "uid")

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code

    sentMessageView.layer.masksToBounds  = true
    recievedMessageView.layer.masksToBounds = true

}

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}

func configCell(message: Message) {

    self.message = message

    print("message label::\(message.message.count)")
    if message.sender == currentUser {

        let time = message.receivedTimeStamp
        let timeinterval : TimeInterval = time
        let dateFromServer = NSDate(timeIntervalSince1970:timeinterval)
        let formatter = DateFormatter()
        formatter.calendar = NSCalendar(calendarIdentifier: NSCalendar.Identifier.ISO8601) as Calendar?
        formatter.locale = NSLocale(localeIdentifier: "en_IN") as Locale
        formatter.timeZone = NSTimeZone(name: "GMT+5:30") as TimeZone?

        formatter.dateFormat = "h:mm a"
        formatter.amSymbol = "AM"
        formatter.pmSymbol = "PM"
        let dateString: String = formatter.string(from: dateFromServer as Date)

        print("dateString:::\(dateString)")

        sentMessageView.isHidden = false

        sentMessageView.layer.backgroundColor = UIColor.clear.cgColor

        sentMessageLbl.text = " " + message.message
        sentTimeLabel.text = " " + dateString

        recievedMessageLbl.text = ""

        recievedMessageLbl.isHidden = true

        recievedMessageView.isHidden = true

    } else {

        let time = message.receivedTimeStamp
        let timeinterval : TimeInterval = time
        let dateFromServer = NSDate(timeIntervalSince1970:timeinterval)
        let formatter = DateFormatter()
        formatter.calendar = NSCalendar(calendarIdentifier: NSCalendar.Identifier.ISO8601) as Calendar?
        formatter.locale = NSLocale(localeIdentifier: "en_IN") as Locale
        formatter.timeZone = NSTimeZone(name: "GMT+5:30") as TimeZone?

        formatter.dateFormat = "h:mm a"
        formatter.amSymbol = "AM"
        formatter.pmSymbol = "PM"
        let dateString: String = formatter.string(from: dateFromServer as Date)

        print("dateString:::\(dateString)")

        sentMessageView.isHidden = true
        sentMessageLbl.isHidden = true
        sentMessageLbl.text = ""

        recievedMessageLbl.text = " " + message.message

        receivedTimeLabel.text = " " + dateString

        recievedMessageLbl.isHidden = false

        recievedMessageView.layer.backgroundColor = UIColor.clear.cgColor

    }
}

}

這是我的截圖: 在此處輸入圖片說明

我的郵件數正確,但是郵件已滿載。

任何幫助非常感謝...

用它。 heightForRowAt用於單元格的高度,但是您必須檢查約束。 並使用UITableViewDelegate來使用它

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return UITableView.automaticDimension
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM