TableView Chat扩展消息

时间:2017-03-02 04:56:47

标签: ios swift firebase firebase-realtime-database tableview

1.。)如何在聊天中扩展消息,以便将tableView块配置为消息大小,而不在末尾添加“.....”。

2。)当我点击发送时,消息上传到数据库但不会再发送到tableView,直到我重新加载控制器?解决这个问题的最佳方法是什么?

3.。)加载表格视图,使其显示底部发布的最后一条消息?

我的tableView图片:

1

import UIKit
import Foundation
import Firebase
import FirebaseDatabase
import FirebaseStorage

struct postStruct {
    let username : String!
    let message : String!
    let photoURL : String!
}

class GeneralChatroom: UIViewController, UITableViewDataSource, UITableViewDelegate {

    @IBOutlet weak var messageTextField: UITextField!

    var generalRoomDataArr = [postStruct]()

    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let ref = FIRDatabase.database().reference()

        ref.child("general_room").queryOrderedByKey().observe(.childAdded, with: {snapshot in

            let snapDict = snapshot.value as? NSDictionary
            let username = snapDict?["Username"] as? String ?? ""
            let message = snapDict?["Message"] as? String ?? ""
            let firebaseUserPhotoURL = snapDict?["photo_url"] as? String ?? ""

            self.generalRoomDataArr.insert(postStruct(username: username, message: message, photoURL: firebaseUserPhotoURL), at: 0)
            self.tableView.reloadData()

        })

    }

    @IBAction func backButtonPressed(_ sender: UIButton) {
        self.performSegue(withIdentifier: "BackToRoom", sender: nil)
    }


    //Message Send button is pressed data uploaded to firebase
    @IBAction func sendButtonPressed(_ sender: UIButton) {

        let message : String = self.messageTextField.text!
        UploadGeneralChatRoom(message: message) //update general_room
        //self.tableView.reloadData()
        //UploadUserData() //Update Rank in database
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return generalRoomDataArr.count // your number of cell here
    }

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

        let cell = tableView.dequeueReusableCell(withIdentifier: "cell")

        let usernameLabel = cell?.viewWithTag(1) as! UILabel
        usernameLabel.text = generalRoomDataArr[indexPath.row].username

        let messageLabel = cell?.viewWithTag(2) as! UILabel
        messageLabel.text = generalRoomDataArr[indexPath.row].message


        let imageView = cell?.viewWithTag(3) as! UIImageView

        //Make Porfile Image Cirlce
        imageView.layer.cornerRadius = imageView.frame.size.width/2
        imageView.clipsToBounds = true

        //User Profile image in tableview
        if generalRoomDataArr[indexPath.row].photoURL != nil
        {
            //let imageView = cell?.viewWithTag(3) as! UIImageView

            if let url = NSURL(string: generalRoomDataArr[indexPath.row].photoURL) {

                if let data = NSData(contentsOf: url as URL) {

                    imageView.image = UIImage(data: data as Data)
                }
            }
        }







        // your cell coding
        return cell!
    }

}

1 个答案:

答案 0 :(得分:1)

  

回答Q.1:

您可以将邮件标签行数设置为 0 ;如果您有大量文本,它会垂直扩展您的标签。

您可能还需要将 tableView的行高设置为 automaticDimension ,如下所示: -

tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 140
  

回答Q.2:

tableView添加到UploadUserData()后尝试重新加载。{/ p>

  

回答问题3:

如果您只想反转排序行为而不是排序,则需要使用反向属性

yourdataArray.reverse()