首页 > 解决方案 > 在 Swift 4 中传递数据后的空白标签?

问题描述

我目前正在尝试将数据从我的表视图控制器传递到第二个视图控制器,但我的标签和图像在第二个视图控制器中显示为空白。

这是我的主要事件视图控制器:

class EventsTableViewController: PFQueryTableViewController {


    override func queryForTable() -> PFQuery<PFObject> {
        let query = PFQuery(className: "Events")
        //query.order(byAscending: "location")
        query.order(byAscending: "date")
        return query
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        self.title = "Upcoming Events"
        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.

    func prepare(for segue: UIStoryboardSegue, sender: Any?) {

            if segue.identifier == "MasterToDetail" {
                let detailVC = segue.destination as!  DetailViewController
               detailVC.myEventCell = sender as? EventCell 
            }
        }
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath, object: PFObject?) -> PFTableViewCell? {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! EventCell

        cell.dateLabel.text = object?.object(forKey: "date") as? String
        cell.locationLabel.text = object?.object(forKey: "location") as? String
        cell.nameLabel.text = object?.object(forKey: "name") as? String

        let imageFile = object?.object(forKey: "image") as? PFFile

        cell.eventImage.image = UIImage(named: "download")

        cell.eventImage.file = imageFile
        cell.eventImage.loadInBackground()

        return cell
    }

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        performSegue(withIdentifier: "MasterToDetail", sender: EventCell())

    }

    @IBAction func reloadTable(_ sender: Any) {

        self.loadObjects()
    }

            @IBAction func onSignOutTapped(_ sender: Any) {
        let firebaseAuth = Auth.auth()
        do {
            try firebaseAuth.signOut()
            performSegue(withIdentifier: "signOutSegue", sender: nil)
            } catch {
            print (error)
        }

    }

}

和我的第二个视图控制器:

class DetailViewController: UIViewController {


    @IBOutlet weak var detailImageView: UIImageView!
    @IBOutlet weak var detailNameLabel: UILabel!
    @IBOutlet weak var detailDescriptionLabel: UILabel!
    @IBOutlet weak var detailLocationLabel: UILabel!

    var myEventCell: EventCell?

    override func viewDidLoad() {
        super.viewDidLoad()

        setUI()
    }
    func  setUI () {
        detailNameLabel.text = myEventCell?.nameLabel.text
        detailImageView.image = myEventCell?.eventImage.image
        detailLocationLabel.text = myEventCell?.locationLabel.text
    }

}

标签: swift

解决方案


当您在这里发送一个空单元格时

performSegue(withIdentifier: "MasterToDetail", sender: EventCell())

你需要

let cell = tableView.cellForRow(at:indexPath)
performSegue(withIdentifier: "MasterToDetail", sender:cell)

推荐阅读