ios - Swift 4:从表视图传递到视图控制器 - Firebase?
问题描述
我花了几个小时查看相同的问题,但我找到的答案都没有解决这个问题。需要来自 Firebase 数据库的数据从 tableview 传递到另一个视图控制器。需要显示的 PD 数据不在单元格中,我需要从单击表单视图行的 ID 从 firebase 获取。我已经和手写的照片来解释我需要什么。
这是我来自 VC 1 的代码:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return guestsList.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "guestCell", for: indexPath) as! GuestTableViewCell
let guest: GuestModel
guest = guestsList[indexPath.row]
cell.guestNameLabel.text = guest.guestName
cell.attendingLabel.text = guest.attendingStatus
cell.menuLabel.text = guest.menuStatus
cell.ageLabel.text = guest.ageStatus
cell.tableLabel.text = guest.tableNo
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let selectedGuest = guestsList[indexPath.row]
let controller = self.storyboard?.instantiateViewController(identifier: "GuestDetail") as! GuestDetailsViewController
controller.guestUser = selectedGuest
self.present(controller, animated: true, completion: nil)
}
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
let guest = guestsList[indexPath.row]
self.guestsList.remove(at: indexPath.row)
self.guestsTableView.reloadData()
self.deleteGuest(id: guest.id!)
}
}
和 VC 2
var ref: DatabaseReference!
let uid = Auth.auth().currentUser?.uid
var guestDetail = [GuestModel]()
var guestUser: GuestModel?
var documenID: String?
override func viewDidLoad() {
super.viewDidLoad()
showGuestDetails()
}
func showGuestDetails(){
ref = Database.database().reference().child("userInfo").child(uid!).child("guests")
ref.queryOrderedByKey().observeSingleEvent(of: .value) { (snapshot) in
if snapshot.childrenCount>0{
self.guestDetail.removeAll()
for guests in snapshot.children.allObjects as![DataSnapshot]{
let guestObject = guests.value as? [String: AnyObject]
let name = guestObject?["guestName"]
let familyName = guestObject?["guestFamilyName"]
let phone = guestObject?["guestPhoneNumber"]
let email = guestObject?["guestEmail"]
let guest = GuestModel(guestName: name as? String, guestFamilyName: familyName as! String, guestPhoneNumber: phone as? String, guestEmail: email as? String)
self.phoneNoLabel.text = guest.guestPhoneNumber
self.emailLabel.text = guest.guestEmail
}
}
}
self.nameLabel.text = guestUser!.guestName
}'''
解决方案
您可以通过 2 种方式达到预期的效果:
将 autoId 从 1st VC 传递到 2nd Detail VC,并
showGuestDetails()
作为参考ref = Database.database().reference().child("userInfo").child(uid!).child("guests").child(passedAutoID)
保持相同的引用,但使用 if 条件检查用户是否与要求的相同
for guests in snapshot.children.allObjects as![DataSnapshot]{ let guestObject = guests.value as? [String: AnyObject] guard let email = guestObject?["guestEmail"] as? String, email != guestUser?.email else { continue } let name = guestObject?["guestName"] let familyName = guestObject?["guestFamilyName"] let phone = guestObject?["guestPhoneNumber" let guest = GuestModel(guestName: name as? String, guestFamilyName: familyName as! String, guestPhoneNumber: phone as? String, guestEmail: email as? String) self.nameLabel.text = guest.guestName self.phoneNoLabel.text = guest.guestPhoneNumber self.emailLabel.text = guest.guestEmail }
推荐阅读
- javascript - 使用 ajax 的 WordPress REST api 中未排除帖子
- reactjs - Google AMP 可以与 ReactJS 应用程序一起使用吗?在这种情况下,服务器端渲染是强制性的吗?
- php - Laravel orderBy 列值错误
- xml - XSL 如何使用 sum 到 foreach 中执行赔率程序?
- python - 使用 DictWriter 将临时字典导出到 .csv
- swift - 将文本从 MKMarkerAnnotation 传递到不同的视图控制器
- python - 简单的 SQLAlchemy SubFactory 示例
- xcode - Xcode 9 项目导航器中没有文件
- vba - 从单元格中删除 .pdf
- javascript - 如何在 javascript 中获取 wordpress 主页 url?