Передать изображение из коллекции в viewcontroller swift - PullRequest
0 голосов
/ 02 февраля 2019

у меня есть проблема, я не могу передать ImageView из коллекции в viewcontroller, используя базу данных Firebase

этот мой код

импорт UIKit импорт Firebase импорт FirebaseDatabase импорт SDWebImage импорт FirebaseStorage импорт KRProgressHUD

class ViewControllerCollocation: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {

@IBOutlet weak var MyColloctaion: UICollectionView!


var imagePicker = UIImagePickerController()

var images = [ImagePost]()


var dbRef:DatabaseReference!

override func viewDidLoad() {
    super.viewDidLoad()

    setutxent()

    designCollectionView()

    imagePicker.delegate = self

    dbRef = Database.database().reference().child("Images")



    /////////


    loadDB()

    KRProgressHUD.set(style: .custom(background: .black, text: .white, icon: nil))
    KRProgressHUD.show(withMessage: "Loading...")

    DispatchQueue.main.asyncAfter(deadline: .now() + 3) {

        KRProgressHUD.dismiss()

    }


}

func loadDB(){

    dbRef.observe(DataEventType.value, with: { (snapshot) in

        var newImages = [ImagePost]()

        for imageFireSnapshot in snapshot.children {

            let ImagesFireObject = ImagePost(snapshot: imageFireSnapshot as! DataSnapshot)
            newImages.append(ImagesFireObject)
        }
        self.images = newImages
        self.MyColloctaion.reloadData()
    }
    )}


func collectionView(_ colloction: UICollectionView, numberOfItemsInSection section: Int) -> Int {


    return images.count
}


internal func collectionView(_ colloction: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = colloction.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! UploadOneCollectionViewCell


    let image = images[indexPath.row]

    cell.ImageView.layer.cornerRadius = 13
    cell.ImageView.clipsToBounds = true

    cell.ImageView.sd_setImage(with: URL(string: image.url), placeholderImage: UIImage(named: "Image1"))

    return cell


}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

}

func designCollectionView() {

    let itemSize = UIScreen.main.bounds.width/3 - 3

    let layout = UICollectionViewFlowLayout()
    layout.sectionInset = UIEdgeInsets(top: 1, left: 1, bottom: 1, right: 1)
    layout.itemSize = CGSize(width: itemSize, height: 230)

    layout.minimumInteritemSpacing = 1
    layout.minimumLineSpacing = 1
    //layout.scrollDirection = .horizontal

    self.MyColloctaion.isPagingEnabled = true


    MyColloctaion.collectionViewLayout = layout
}

func steupbar(){

    navigationController?.navigationBar.barTintColor = UIColor.black
    tabBarController?.tabBar.barTintColor = UIColor.black
    self.navigationController?.navigationBar.titleTextAttributes =
        [NSAttributedString.Key.foregroundColor: UIColor.white,
         NSAttributedString.Key.font: UIFont(name: "Baskerville-BoldItalic", size: 21)!]

}


@IBAction func Upload(_ sender: Any) {



    imagePicker =  UIImagePickerController()
    imagePicker.allowsEditing = false
    imagePicker.sourceType = .photoLibrary
    imagePicker.delegate = self

    self.present(imagePicker, animated: true, completion: nil)
}

func generateRandom(size: UInt) -> String {
    let prefixSize = Int(min(size, 43))
    let uuidString = UUID().uuidString.replacingOccurrences(of: "-", with: "")
    return String(Data(uuidString.utf8)
        .base64EncodedString()
        .replacingOccurrences(of: "=", with: "")
        .prefix(prefixSize))
}

}


это мой "" ImagePost.swift """


import Foundation import FirebaseDatabase

struct ImagePost {let key: String! Let url: String!

let itemRef:DatabaseReference?


init(url:String, key:String) {
    self.key = key
    self.url = url
    self.itemRef = nil
}

init(snapshot:DataSnapshot) {
    key = snapshot.key
    itemRef = snapshot.ref


    let snapshotValue = snapshot.value as? NSDictionary

    if let imageUrl = snapshotValue?["url"] as? String {
        url = imageUrl
    }else{
        url = ""
    }

}

}


и это мой подробный вид

import UIKit

class VC1: UIViewController {

 var imageURL : String?

@IBOutlet weak var ImageView: UIImageView!



override func viewDidLoad() {
    super.viewDidLoad()


}

}


и спасибо за вашепомогите ребята!

1 Ответ

0 голосов
/ 02 февраля 2019

Вы можете передать изображение в детальный вид, получив изображение в методе didselect:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

        let image = images[indexPath.row]
        let vc = self.storyboard?.instantiateViewController(withIdentifier: "VC1") as! VC1
        vc.imageObject = images[indexPath.row]
        self.navigationController?.pushViewController(vc, animated: false)
}

Просто создайте переменную как imageObject в VC1 и передайте ей данные, как показано выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...