Firebase检索图像作为Url传递tableView作为图像(Swift)

时间:2017-04-25 13:05:09

标签: ios firebase swift3 firebase-realtime-database

我试图将我的数据检索为URL并传递另一个viewController。

以下是我的检索数据代码:

private func loadPlaces() {


        let ref = FIRDatabase.database().reference()

        ref.child("places").queryOrderedByKey().observeSingleEvent(of: .value, with: { snapshot in

            let images = snapshot.value as! [String : AnyObject]
            // self.places.removeAll()
            for (_, value) in images {
                let userToShow = historicalPlaces()
                if let img = value["imagePath"] as? String,
                    let name = value["name"] as? String,
                    let information = value["information"] as? String
                {


                    userToShow.historyImage = img
                    userToShow.historyName = name
                    userToShow.information = information
                    self.places.append(userToShow)

                }


            }
            self.tableView.reloadData()
        })
        //  ref.removeAllObservers()

    }

在此代码中,我使用可以读取URL的扩展名。

扩展代码在这里。

extension UIImageView {
 func downloadImage(from imgURL: String!) {
        let url = URLRequest(url: URL(string: imgURL)!)

        let task = URLSession.shared.dataTask(with: url) {
            (data, response, error) in

            if error != nil {
                print(error!)
                return
            }

            DispatchQueue.main.async {
                self.image = UIImage(data: data!)
            }

        }

        task.resume()
    }

}

在这里我将我的图像和标签打印到viewController。

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


        let cellIdentifier = "historyTableViewCell"

        guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? HistoryTableViewCell  else {
            fatalError("The dequeued cell is not an instance of historyTableViewCell.")
        }


        let place = places[indexPath.row]

        cell.nameLabel.text = place.historyName
        cell.photoImageView.downloadImage(from: place.historyImage!)


        return cell
    }

这是单元格控制代码:

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

        super.prepare(for: segue, sender: sender)

        switch(segue.identifier ?? "") {

        case "ShowDetail":
            guard let historyDetail = segue.destination as? selectedPlaceViewController else {
                fatalError("Unexpected destination: \(segue.destination)")
            }

            guard let selectedPlace = sender as? HistoryTableViewCell else {
                fatalError("Unexpected sender: \(sender)")
            }

            guard let indexPath = tableView.indexPath(for: selectedPlace) else {
                fatalError("The selected cell is not being displayed by the table")
            }

            let Place = places[indexPath.row]

            historyDetail.selectedPlaces = Place

        default:
            fatalError("Unexpected Segue Identifier; \(segue.identifier)")
        }
    }

现在每当我点击具有视图和标签的单元格时,将其图像和标签打印到另一个viewController。

我尝试这样的事情:

import UIKit

class selectedPlaceViewController: UIViewController, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate {


    @IBOutlet weak var nameTextField: UITextField!
    @IBOutlet weak var photoImageView: UIImageView!

    var selectedPlaces: historicalPlaces?

    override func viewDidLoad() {
        super.viewDidLoad()


        nameTextField.delegate = self
        if let history = selectedPlaces {
            navigationItem.title = history.historyName
            nameTextField.text = history.historyName
         //   photoImageView.downloadImage(from: selectedPlaces [IndexPath.init(row: 0, section: 0)].historyImage!)


        }
    }   
}

在此代码中,我可以从另一个viewController检索标签,但我无法检索图像。如何从另一个viewCell URL中检索图像到图像。

0 个答案:

没有答案