ios - 将 Firebase 数据从 TableViewCell 传递到 ViewController

标签 ios swift uitableview firebase firebase-realtime-database

我一直在尝试多种方法将我的 firebase 数据从 TableViewCell 传递到 ViewController,但找不到最简单的解决方案。

我有一个带有 EncounterTableViewCells 的 EncounterTableViewController。这是用 Firebase 数据填充的。选择 EncounterTableViewCell 后,我想将数据传递给 EncounterDetailViewController。

EncountersTableViewController.swift

class EncountersTableViewController: UITableViewController  {

    var encounters : [Encounter] = []

    // MARK: - View Did load
    override func viewDidLoad() {
       super.viewDidLoad()
       showAllEncounters()
    }

    // MARK: - Encounter filters
    func showAllEncounters() {
        // Firebase tableview data
        FIRDatabase.database().reference().child("encounters").observeSingleEvent(of: .value, with: { (snapshot) in
        for rest in snapshot.children.allObjects as! [FIRDataSnapshot] {

            guard let restDict = rest.value as? [String: Any] else { continue }

            let encounter = Encounter()
            encounter.sharkName = (restDict["shark_name"] as? String)!
            encounter.date = (restDict["trip_date"] as? String)!
            encounter.contributorName = (restDict["contributor"] as? String)!
            encounter.contributorImage = (restDict["contributor_image"] as? String)!


            let mediaDict = (restDict["media"] as? NSArray)
            let firstImage = mediaDict![0] as! NSDictionary
            encounter.mainImage = firstImage["thumb_url"] as! String

            self.encounters.append(encounter)

            self.tableView.reloadData()
        }
      })
    }

    // MARK: - Navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "segueToEncounterCard" {
            let destination = segue.destination as! EncounterDetailViewController
        }
    }

EncounterDetailViewController.swift

class EncounterDetailViewController: UIViewController {

// MARK: - Outlets
@IBOutlet weak var encounterDateLabel: UILabel!
@IBOutlet weak var locationLabel: UILabel!
@IBOutlet weak var lengthLabel: UILabel!
@IBOutlet weak var contributorNameLabel: UILabel!
@IBOutlet weak var contributorImageView: UIImageView!

// MARK: - Properties
var dictionary: [String:AnyObject]?

// MARK: - View did load
override func viewDidLoad() {
    super.viewDidLoad()
}
}

最佳答案

您需要传递 Encounter 的对象而不是传递 dictionary,因此在您的 EncounterDetailViewController 中声明一个 Encounter 类型的实例属性 与命名 selectedEncounter。现在,在 EncountersTableViewControllerprepareForSegue 方法中,将 Encounter 的对象从数组传递到此 detailViewController。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "segueToEncounterCard" {
        let destination = segue.destination as! EncounterDetailViewController
        if let indexPath = self.tableView.indexPathForSelectedRow {
            destination.selectedEncounter = self.encounters[indexPath.row]
        }
    }
} 

EncounterDetailViewController

class EncounterDetailViewController: UIViewController {

    // MARK: - Outlets
    @IBOutlet weak var encounterDateLabel: UILabel!
    @IBOutlet weak var locationLabel: UILabel!
    @IBOutlet weak var lengthLabel: UILabel!
    @IBOutlet weak var contributorNameLabel: UILabel!
    @IBOutlet weak var contributorImageView: UIImageView!

    // MARK: - Properties
    var selectedEncounter: Encounter?

    // MARK: - View did load
    override func viewDidLoad() {
        super.viewDidLoad()
        //access selectedEncounter property here and set all label's text
    }
}

关于ios - 将 Firebase 数据从 TableViewCell 传递到 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44234555/

相关文章:

ios - NSDate - 返回最近的小时

ios - 如何通过 UITableViewCell 打开 URL

ios - 使用 AWS SDK 2 和 Cognito 为使用 iOS SDK 2 的未授权用户将文件放在 S3 上

ios - Xcode 11 : Changes in code not updated to app or breakpoint doesn't work

objective-c - IOS动态设置分组TableView的标题高度

swift - "implicit conversion from <tuple type> to <tuple type 2> requires a temporary"将元组作为 inout 参数传递时出错

ios - 是否可以无线调试 iphone webapp?

Swift 泛型 - 协议(protocol)不符合协议(protocol)

ios - 动画 UITableViewCell 高度

ios - 尝试从动态 UITableViewCell 执行 popover segue 时出现编译错误