ฉันกำลังสร้างแอปห้องสนทนา ในปัจจุบัน เมื่อผู้ใช้ลงชื่อเข้าใช้ พวกเขาจะได้รับมุมมองตารางของตนเองในการอัปโหลดข้อมูลด้วย
แทนที่จะให้ผู้ใช้แต่ละคนมีมุมมองตารางส่วนตัวเป็นของตัวเอง ฉันต้องการให้ผู้ใช้ทุกคนเชื่อมต่อกับมุมมองตารางเดียว (สาธารณะ) เพื่อให้ทุกคนสามารถเห็นสิ่งที่โพสต์ได้ ดังนั้นแอปห้องสนทนา
- นี่คือการเข้าสู่ระบบ 3 แบบแยกกัน และลักษณะที่ปรากฏสำหรับผู้ใช้แต่ละคนเมื่อโพสต์ข้อความ:
- นี่คือสิ่งที่ฉันต้องการ หากต้องการให้แต่ละเซลล์ tableview แสดงข้อความที่แตกต่างจากผู้ใช้รายอื่น ทั้งหมดดูแบบสาธารณะในหนึ่ง tableview ไม่ได้อยู่ในมุมมองตารางแยก:
ฉันจะทำให้มุมมองตารางเป็นแบบสาธารณะได้อย่างไร เมื่อฉันเข้าสู่ระบบในฐานะผู้ใช้อื่น ฉันต้องการให้ข้อความก่อนหน้านี้ยังคงอยู่จากผู้ใช้แต่ละคน จึงมีห้องสนทนา
{
"rules": {
"Users":{
".read": "true",
".write": "true"
},
"general_room" : {
".read": "true",
".write": "true"
}
}
}
GeneralChatroom.swift
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, UITextFieldDelegate {
@IBOutlet weak var messageTextField: UITextField!
var generalRoomDataArr = [postStruct]()
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 140
let ref = FIRDatabase.database().reference()
let userID = FIRAuth.auth()?.currentUser?.uid
ref.child("general_room").child("chat").child(userID!).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) //upload to general_room
self.messageTextField.text = nil
messageTextField.resignFirstResponder()//Quit keyboard
self.tableView.reloadData() //Reload tableView
//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.numberOfLines=0 // line wrap
messageLabel.lineBreakMode = NSLineBreakMode.byWordWrapping
messageLabel.text = generalRoomDataArr[indexPath.row].message
//initialize UI Profile Image
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!
}
}//END CLASS
อัปโหลดไปยัง firebase
import Foundation
import Firebase
import FirebaseDatabase
import FirebaseStorage
func UploadGeneralChatRoom(message : String) {
//Firebase Initialization
var ref: FIRDatabaseReference!
//var storage: FIRStorageReference!
let userID = FIRAuth.auth()?.currentUser?.uid
ref = FIRDatabase.database().reference()
//storage = FIRStorage.storage().reference()
//Get Data from database resend to database
ref.child("Users").child(userID!).observeSingleEvent(of: .value, with: {(snapshot) in
let snapDict = snapshot.value as? NSDictionary
let username = snapDict?["Username"] as? String ?? ""
let firebaseUserPhotoURL = snapDict?["photo_url"] as? String ?? ""
ref.child("general_room").child("chat").child(userID!).childByAutoId().setValue(["Username": username, "uid": userID!, "Message" : message, "photo_url" : firebaseUserPhotoURL])
})
}