2017-01-03 8 views
0

Я использую UICollectionView для загрузки и отображения изображений из базы данных Backendless, как я могу снова отобразить эти изображения в ViewController, которые содержат ImageView, когда я нажимаю на любую строку My CollectionView с помощью Swift3.Как отобразить изображение в новом ViewController, содержащее ImageView после загрузки из задней бесконечной базы данных с помощью Swift3

Это мой CollectionView.

import UIKit 
import SDWebImage 

class GallaryCollectionViewController: UICollectionViewController { 
    var GallaryArray = [TestTable]() 
    let backendless = Backendless() 

    override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(animated) 
     loaddatawithquery() 
    } 

    // MARK: UICollectionViewDataSource 

    override func numberOfSections(in collectionView: UICollectionView) -> Int { 
     return 1 
    } 

    override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     return GallaryArray.count 
    } 

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

     if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as? GallaryCell { 

      let ImgURL = URL(string : self.GallaryArray[(indexPath as NSIndexPath).row].ImgURL!) 
      cell.GallImag.sd_setImage(with: ImgURL) 

      cell.ShowImg = { 
       if let myimage = (cell.GallImag.image) { 
        // Error here How to complete the code ? 
       } 

      } 
      return cell 
     } 
     else { 
      let cell = GallaryCell() 
      let ImgURL = URL(string : self.GallaryArray [(indexPath as NSIndexPath).row].ImgURL) 
      cell.GallImag.sd_setImage(with: ImgURL) 
      cell.ShowImg = { 
       if let myimage = (cell.GallImag.image) { 

       } 
      } 
      return cell 
     } 
    } 

    func loaddatawithquery() {   
     let dataQuery = BackendlessDataQuery() 
     dataQuery.queryOptions.pageSize = 50 

     backendless.data.of(TestTable.ofClass()).find(dataQuery,response: {(result: BackendlessCollection?) -> Void in 

      let data = result?.getCurrentPage() 

      for obj in data! as! [TestTable] { 
       self.GallaryArray.append(obj) 
       self.collectionView?.reloadData() 
      } 

     }, error: { (fault: Fault?) -> Void in 
      let alert = UIAlertController(title: "انتباه", message:"يرجى الاتصال بالانترنيت", preferredStyle: .alert) 

      alert.addAction(UIAlertAction(title: "OK", style: .default) { _ in }) 
      self.present(alert, animated: true){} 
     }) 
    } 

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

И это моя ячейка.

import UIKit 

    class GallaryCell: UICollectionViewCell { 

@IBOutlet weak var GallImag: UIImageView! 

var ShowImg : (() ->Void)? 


    func setSelected(_ selected: Bool, animated: Bool) { 
    setSelected(selected, animated: animated) 

    self.ShowImg!() 
    } 

} 
+0

Что вы подразумеваете под беззащитным? – Honey

+0

Я использую базу данных Backendless для загрузки данных. –

ответ

0

Я собираюсь предположить, что вы правильно загрузили изображения в виде коллекции.

есть метод делегата вы можете использовать называется didSelectRow ...

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

    self.passingTestTable = self.GallaryArray[indexPath.row] 

    self.performSegue(withIdentifier: "segue for new view controller", sender: nil) 


} 

self.passingTestTable другое свойство создавать глобально в верхней части TestTable() (это, как я это делаю, некоторые из них могут выбрать для создания экземпляра внутри didSelectRow

другая вещь, которую вы должны будете сделать, это создать экземпляр TestTable на приемном ViewController (т.е. self.receivedTestTable)

в подготовке к Segue вы можете выбрать пункт s избранные и отправить его на новый ViewController

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "yourSegueName" { 

     if let controller = segue.destination as? PassedImageDetailViewController { 

      controller.receivedTestTable = self.passingTestTable 
     } 

     else { 
      print("Your segue identifier is incorrect") 
     } 
    } 
} 

, как только вы сделали это, детальность View Controller имеет доступ к данным изображений, и вы можете отобразить в на виде изображений на этом экране.

+0

Невозможно отобразить, когда я нажимаю на любое изображение в My CollectionView, и оно печатается (ваш идентификатор segue неверен). –

+0

TestTable ваша модель? – cmyers78

+0

Да, это моя модель. –