CustomCell label in ViewController not displaying data

Deadly 提交于 2019-12-11 15:39:11

问题


Good afternoon, I'm running a query in Firebase and the info i get back i use it to run another query. The issue i'm having is displaying the data on the second CustomCell. I'm using the print statement and data is showing in the console. Segues are working as expected, TableViews are setup as datasource and delegate, IBOutlets are in place, Cell identifiers in Storyboard are in place too. i cannot find a solution for it, i'm not sure what i'm missing. Any help is greatly appreciated.

Cell with second query

class PatlistCell: UITableViewCell {

    @IBOutlet weak var ptnameLbl: UILabel!
    @IBOutlet weak var assignedmdLbl: UILabel!
    @IBOutlet weak var officemdLbl: UILabel!
    @IBOutlet weak var roomnumberLbl: UILabel!
    @IBOutlet weak var seenoseeLbl: UILabel!
    @IBOutlet weak var assigneddateLbl: UILabel!
    @IBOutlet weak var ptdataBtn: UIButton!

var ptdatas = [PTData]()
var ptdatainfoRef: CollectionReference!
var delegate: MyCellDelegate?
var patDataQuery: Query!

override func awakeFromNib() {
    super.awakeFromNib()

    ptdatainfoRef = Firestore.firestore().collection(PTLIST_REF)
}

func configurePatListCell(ptlist: PTList) {

    ptnameLbl.text = ptlist.ptname
    assignedmdLbl.text = ptlist.assignedmd
    officemdLbl.text = ptlist.officemd
    roomnumberLbl.text = ptlist.room
    seenoseeLbl.text = ptlist.seenosee
    assigneddateLbl.text = ptlist.assigneddate 
}

@IBAction func ptdataTapped(_ sender: Any) {

    let patDataQuery = ptdatainfoRef.whereField("ptname", 
isEqualTo: (ptnameLbl.text!))
        .whereField("assignedmd", isEqualTo: (assignedmdLbl.text!))
        .whereField("officemd", isEqualTo: (officemdLbl.text!))
        .whereField("room", isEqualTo: (roomnumberLbl.text!))
        .whereField("seenosee", isEqualTo: (seenoseeLbl.text!))
        .whereField("assigneddate", isEqualTo: 
(assigneddateLbl.text!))

    patDataQuery.getDocuments { (snapshot, error) in
        if let err = error {
            debugPrint("error getting data: \(err)")
        } else {
            guard let snap = snapshot else { return }
            for document in snap.documents {
                let data = document.data()
                let ptname = data[PTNAME] as? String ?? ""
                let dob = data[DOB] as? String ?? ""
                let fin = data[FIN] as? String ?? ""
                let officemd = data[OFFICEMD] as? String ?? ""
                let assignedmd = data[ASSIGNEDMD] as? String ?? ""
                let assigneddate = data[ASSIGNEDDATE] as? String ?? 
""
                let room = data[ROOM] as? String ?? ""
                let diagnoses = data[DIAGNOSES] as? String ?? ""
                let reasonforadmitorconsult = 
data[REASONFORADMITORCONSULT] as? String ?? ""
                let goalofhospitalization = 
data[GOALOFHOSPITALIZATION] as? String ?? ""
                let seenosee = data[SEENOSEE] as? String ?? ""
                let notestocbo = data[NOTESTOCBO] as? String ?? ""
                let comments = data[COMMENTS] as? String ?? ""
                let hosp = data[HOSP] as? String ?? ""
                let team = data[TEAM] as? String ?? ""

                let newPtdata = PTData (ptname: ptname, dob: dob, 
fin: fin, officemd: officemd, assignedmd: assignedmd, assigneddate: 
assigneddate, room: room, diagnoses: diagnoses, 
reasonforadmitorconsult: reasonforadmitorconsult, 
goalofhospitalization: goalofhospitalization, seenosee: seenosee, 
notestocbo: notestocbo, comments: comments, hosp: hosp, team: team)

                self.ptdatas.append(newPtdata)
                print(document.data())

            }
        }
     self.delegate?.cellButtonPressed(self.ptdatas) //argument to pass the variable to the VC
    }

 }

}

ViewController

class ResultsdataVC: UIViewController  {

@IBOutlet weak var resultsTableView: UITableView!

var ptlists = [PTList]()
var ptdatas = [PTData]()

override func viewDidLoad() {
    super.viewDidLoad()
    resultsTableView.delegate = self
    resultsTableView.dataSource = self
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "gotoptinfo" {
        let destVC = segue.destination as! PatdataVC
        destVC.ptdatas = ptdatas
    }
}
}

extension ResultsdataVC: UITableViewDataSource, 
UITableViewDelegate, MyCellDelegate {

func tableView(_ tableView: UITableView, numberOfRowsInSection 
section: Int) -> Int {
    return ptlists.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: 
IndexPath) -> UITableViewCell {
    if tableView == self.resultsTableView {
        let cell = tableView.dequeueReusableCell(withIdentifier: 
"PatlistCell", for: indexPath) as? PatlistCell
        cell!.configurePatListCell(ptlist: ptlists[indexPath.row])
        cell!.delegate = self
        return cell!
    }
    return UITableViewCell()
}

func cellButtonPressed() {
    self.ptdatas = ptdatas . //this allows the VC populate the local variable                              
    performSegue(withIdentifier: "gotoptinfo", sender: self)
}
}

Second Cell

class PatdataCell: UITableViewCell {

@IBOutlet weak var ptnameLbl: UILabel!
@IBOutlet weak var dobLbl: UILabel!
@IBOutlet weak var finLbl: UILabel!
@IBOutlet weak var officemdLbl: UILabel!
@IBOutlet weak var assignedmdLbl: UILabel!
@IBOutlet weak var assigneddateLbl: UILabel!
@IBOutlet weak var roomnumberLbl: UILabel!
@IBOutlet weak var diagnosesLbl: UILabel!
@IBOutlet weak var reasonforadmitorconsultLbl: UILabel!
@IBOutlet weak var goalofhospitalizationLbl: UILabel!
@IBOutlet weak var seenoseeLbl: UILabel!
@IBOutlet weak var notestocboLbl: UILabel!
@IBOutlet weak var commentsLbl: UILabel!
@IBOutlet weak var hospitalLbl: UILabel!
@IBOutlet weak var teamLbl: UILabel!

override func awakeFromNib() {
    super.awakeFromNib()
}

func configurePatDataCell(ptdata: PTData) {

    ptnameLbl.text = ptdata.ptname
    dobLbl.text = ptdata.dob
    finLbl.text = ptdata.fin
    officemdLbl.text = ptdata.officemd
    assignedmdLbl.text = ptdata.assignedmd
    assigneddateLbl.text = ptdata.assigneddate
    roomnumberLbl.text = ptdata.room
    diagnosesLbl.text = ptdata.diagnoses
    reasonforadmitorconsultLbl.text = 
ptdata.reasonforadmitorconsult
    goalofhospitalizationLbl.text = ptdata.goalofhospitalization
    seenoseeLbl.text = ptdata.seenosee
    notestocboLbl.text = ptdata.notestocbo
    commentsLbl.text = ptdata.comments
        hospitalLbl.text = ptdata.hosp
        teamLbl.text = ptdata.team

    }
}

Second ViewController

class PatdataVC: UIViewController, UITableViewDelegate, 
UITableViewDataSource {

var ptdatas = [PTData]()

@IBOutlet weak var patDataTableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()

    patDataTableView.delegate = self
    patDataTableView.dataSource = self
}

func tableView(_ tableView: UITableView, numberOfRowsInSection 
section: Int) -> Int {
    return ptdatas.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: 
IndexPath) -> UITableViewCell {
    if tableView == patDataTableView {
        let cell = tableView.dequeueReusableCell(withIdentifier: 
"PatdataCell", for: indexPath) as? PatdataCell
        cell!.configurePatDataCell(ptdata: ptdatas[indexPath.row])
        return cell!
    }
    return UITableViewCell()
}
}

Cell Delegate

protocol MyCellDelegate {
func cellButtonPressed (_ ptdatas: [PTData])
}

回答1:


ptdatas exists in ResultsdataVC and in your PatlistCell. In your PatlistCell this data is appended, but the variable in the ResultsdataVC is not updated.

In prepare for segue your are setting the empty ptdatas list.

A solution would be to make your delegate conform to cellButtonPressed(ptdatas: [PTData]) and pass your generated array from the tableViewCell to your ResultsdataVC and update the ResultsdataVC PTData array before performing the segue.



来源:https://stackoverflow.com/questions/57317277/customcell-label-in-viewcontroller-not-displaying-data

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!