如何解决Swift - 使用表格视图点击单元格后我有相同的数据
我正在制作的餐厅应用中有一个表格视图。我遇到了一个问题。我的应用中有更多餐厅,我希望每家餐厅都展示不同的食物,但是当我选择任何一家餐厅时,我在每个地方都有相同的数据。
这是我声明我正在使用的变量(结构)的地方
struct Category {
let title: String
let photoKeyHome: String
}
var datas: [Category] = []
var filteredData: [Category]!
override func viewDidLoad() {
super.viewDidLoad()
filteredData = datas
}
这是我从 Firestore 检索数据的地方(我使用 Firestore 和 firebase 存储)。
func getDatabaseRecords() {
let db = Firestore.firestore()
// Empty the array
filteredData = []
db.collection("HoMetableViewRestuarants").getDocuments { (snapshot,error) in
if let error = error {
print(error)
return
} else {
for document in snapshot!.documents {
let data = document.data()
let newEntry = Category(
title: data["title"] as! String,photoKeyHome: data["photoKeyHome"] as! String
)
self.filteredData
.append(newEntry)
}
}
dispatchQueue.main.async {
self.datas = self.filteredData
self.hoMetableView.reloadData()
}
}
}
这是我的桌子视图,以及我如何移动到我有食物的第二个桌子视图。
func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = hoMetableView.dequeueReusableCell(withIdentifier: "hoMetableViewCell",for: indexPath) as! hoMetableViewCell
let restaurant = filteredData[indexPath.row]
let storageRef = Storage.storage().reference()
let photoRef = storageRef.child(restaurant.photoKeyHome)
cell.myLabel.text = restaurant.title
cell.myImage.sd_setimage(with: photoRef)
cell.myView.layer.cornerRadius = cell.myView.frame.height / 5
cell.myImage.layer.cornerRadius = cell.myImage.frame.height / 5
return cell
}
func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {
hoMetableView.deselectRow(at: indexPath,animated: true)
let vc = RestaurantViewController()
navigationController?.pushViewController(vc,animated: true)
}
这就是我如何从我的第二个表视图 (RestaurantViewController) 中检索数据
func getDatabaseRecords() {
let db = Firestore.firestore()
// Empty the array
food = []
db.collection("RestaurantViewController").getDocuments { (snapshot,error) in
if let error = error {
print(error)
return
} else {
for document in snapshot!.documents {
let data = document.data()
let newEntry = Food(photoKeyRestaurant: data["photoKeyRestaurant"] as! String,foodName: data["foodName"] as! String,foodDescription: data["foodDescription"] as! String
)
print("document is \(document)")
self.food.append(newEntry)
}
}
dispatchQueue.main.async {
// self.datas = self.filteredData
self.tableView.reloadData()
}
}
}
这是我的结构:
struct Food {
var photoKeyRestaurant: String
var foodName: String
var foodDescription: String
}
var food: [Food] = []
这是我的餐厅视图控制器的表视图
func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
return food.count
}
func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "FoodTableViewCell",for: indexPath) as! FoodTableViewCell
let mancare = food[indexPath.row]
let storageRef = Storage.storage().reference()
let photoRef = storageRef.child(mancare.photoKeyRestaurant)
cell.foodImage.sd_setimage(with: photoRef)
cell.descriptionLabel.text = mancare.foodDescription
cell.foodNameLabel.text = mancare.foodName
return cell
}
对于每家餐厅,我怎样才能有不同的食物?
带餐厅的第一个表视图 | 带有食物的第二个表视图 |
---|---|
HomeTableViewRestaurants collection RestaurantViewController collection
解决方法
类似:
func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {
homeTableView.deselectRow(at: indexPath,animated: true)
let restaurant = filteredData[indexPath.row]
let vc = RestaurantViewController()
vc.getDatabaseRecords(forRestaurant: restaurant)
navigationController?.pushViewController(vc,animated: true)
}
在第二个视图控制器中:
func getDatabaseRecords(forRestaurant restaurant : Category) {
food = []
// Here get the data corresponding to restaurant parameter
...
}
无需重新加载 tableview,因为它会在 table view 出现时完成
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。