Reputation: 1
I've try to fetch data from firestore documents and display in tableview cells, but some how that only will show the first row of data only. please kindly help to review my code below and see which part went wrong. Thanks a lot.
enter code here
@IBOutlet weak var ResDateTxt: UITextField!
@IBOutlet weak var ResTableView: UITableView!
@IBOutlet weak var CheckResBtn: UIStackView!
let userDefault = UserDefaults.standard
let resDatePick = UIDatePicker()
var ReservationList = [Reservation]()
override func viewDidLoad() {
super.viewDidLoad()
hidKeyBoardWhenTappedAround()
createDatePicker()
ResTableView.register(UITableViewCell.self, forCellReuseIdentifier: "ResCell")
ResTableView.delegate = self
ResTableView.dataSource = self
// Do any additional setup after loading the view.
}
@IBAction func CheckResTapped(_ sender: Any) {
let ResCollectionRef = Firestore.firestore().collection("Reservations").whereField("resDate", isEqualTo: ResDateTxt.text!)
ResCollectionRef.getDocuments { (snapshot, error) in
if let err = error {
debugPrint("Error fetching doc: \(err)")
} else {
self.ReservationList = snapshot!.documents.compactMap({Reservation(dictionary: $0.data())})
print(self.ReservationList)
DispatchQueue.main.async {
self.ResTableView.reloadData()
}
}
}
}
func createDatePicker() {
ResDateTxt.textAlignment = .center
//toolbar
let toolbar = UIToolbar()
toolbar.sizeToFit()
//bar button
let doneBtn = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: #selector(donePressed))
toolbar.setItems([doneBtn], animated: true)
//assign toolbar
ResDateTxt.inputAccessoryView = toolbar
//assign date picker to the text feild
ResDateTxt.inputView = resDatePick
resDatePick.datePickerMode = .date
resDatePick.minimumDate = Calendar.current.date(byAdding: .day, value: 0, to: Date())
resDatePick.maximumDate = Calendar.current.date(byAdding: .month, value: 1, to: Date())
}
@objc func donePressed() {
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .none
ResDateTxt.text = formatter.string(from: resDatePick.date)
self.view.endEditing(true)
}
}
extension ResDetailViewController: UITableViewDelegate, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return ReservationList.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 1 }
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
**let cell = tableView.dequeueReusableCell(withIdentifier: "ResCell", for: indexPath)
let Res = ReservationList[indexPath.row]
cell.textLabel?.text = Res.FirstName
cell.detailTextLabel?.text = Res.LastName**
}
}
Upvotes: 0
Views: 153
Reputation: 1025
You switched up the functions numberOfRowsInSection
and numberOfSections
. It should be:
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
And:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// This is the function that says how many rows in the tableView
return ReservationList.count
}
Upvotes: 2