2017-03-02 3 views
0

1.) 채팅 끝에 메시지를 확장하여 끝에 "....."을 추가하지 않고 메시지 크기에 맞게 tableView 블록을 구성 할 수 있습니다.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

대답 Q.1에 대한 :

당신은 당신의 메시지 라벨의 라인의 수를 설정할 수 있습니다 ~ ; 텍스트가 많은 경우 세로로 레이블이 확장됩니다.

당신은 또한 다음과 에 automaticDimension있는 tableView의 행 높이를 설정해야 할 수도 있습니다 : - Q.2에 대한

tableView.rowHeight = UITableViewAutomaticDimension 
tableView.estimatedRowHeight = 140 

답변 :

시도 후 tableView를 다시로드 너는 UploadUserData()에 그것을 더한다. Q.3에 대한

답변 : 당신은 그냥 대신 일종의보다 정렬 동작을 반전하려면

당신은 역 특성을

yourdataArray.reverse() 
+0

감사를 사용할 필요가! 당신이 최고 – nil

+0

내가 numberOfLine = 0으로 설정하면 여전히 다음 줄로 이동하지 않습니다. – nil

+0

고정 된 높이 제약 조건을 지정하는 경우 발생할 수 있습니다. – Aashish