2016-07-15 7 views
0

Я использовал SDWEBIMAGE для отображения изображений в UICollectionView из API. Теперь, когда пользователь нажимает на изображение в коллекции, я хочу открыть изображение в следующем диспетчере представлений. Я могу отобразить заголовок в следующем представлении, но не смог отобразить изображение, потому что я не хочу его назначать в UIImage. Я использую быстро. Может ли кто-нибудь предложить мне способ, как это сделать.Показать больше Изображение в следующем представлении Контроллер из CollectionView

import UIKit 


import SDWebImage 


private let reuseIdentifier = "Celll" 

var titles = [String]() 

var imagecollection = [String]() 

class CollectionViewController: UICollectionViewController, 

UICollectionViewDelegateFlowLayout { 

let sectioninserts = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10) 
var titles = [String]() 
var imagecollection = [String]() 
override func viewDidLoad() { 
    super.viewDidLoad() 

    let url = NSURL(string: "https://api.myjson.com/bins/537mf")! 
    let task = NSURLSession.sharedSession().dataTaskWithURL(url) { (data, response, error) in 
     if error != nil { 
      print("error") 

     }else { 
      if let urlcontent = data { 
       do { 
       let jsoncontent = try NSJSONSerialization.JSONObjectWithData(urlcontent, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary 
        // print(jsoncontent) 

        if jsoncontent.count > 0 { 

         let items = jsoncontent["items"] as! NSArray 

         for item in items as! [[String:String]]{ 

          self.imagecollection.append(item["media"]!) 
          print(self.imagecollection) 
          self.titles.append(item["title"]!) 
          print(self.titles) 


         } 

         dispatch_async(dispatch_get_main_queue(), { 
          self.collectionView?.reloadData() 
         }) 

        } 




       } catch {} 
      } 
     } 
    } 
    task.resume() 


override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    // #warning Incomplete implementation, return the number of items 
    return imagecollection.count 
} 
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 

    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! CollectionViewCell 

    cell.titleee.text = self.titles[indexPath.row] 
    let imagestring = imagecollection[indexPath.row] 
    let imageurl = NSURL(string: imagestring) 
    cell.disp.sd_setImageWithURL(imageurl, placeholderImage: UIImage(named: "loading.gif"), options: SDWebImageOptions.ProgressiveDownload, completed: nil) 




    return cell 
} 
func collectionView(collectionView: UICollectionView!, 
        layout collectionViewLayout: UICollectionViewLayout!, 
          sizeForItemAtIndexPath indexPath: NSIndexPath!) -> CGSize { 
    return CGSize(width: 170, height: 300) 
} 




func collectionView(collectionView: UICollectionView!, 
        layout collectionViewLayout: UICollectionViewLayout!, 
          insetForSectionAtIndex section: Int) -> UIEdgeInsets { 
    return sectioninserts 
} 


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if segue.identifier == "detail" { 
     let cell = sender as! CollectionViewCell 
     let indexPath = collectionView?.indexPathForCell(cell) 
     let vc = segue.destinationViewController as! DetailViewController 


     vc.label = self.titles[indexPath!.row] 

введите код здесь **

+0

просто, вы находитесь в правильном пути, просто показать ур пытался его код легко разрешиться –

+0

@ Anbu.Karthik Я добавил свой код. –

ответ

0

Шаг-1

на этом DetailViewController создать еще один Струнный как MediaStr

class DetailViewController: UIViewController { 

var MediaStr: String 
    var label: String 


override func viewDidLoad() { 
    super.viewDidLoad() 

    print (MediaStr) 
} 

} 

Шаг-2

на первый VC Вызов Direclt как

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

if segue.identifier == "detail" { 
    let cell = sender as! CollectionViewCell 
    let indexPath = collectionView?.indexPathForCell(cell) 
    let vc = segue.destinationViewController as! DetailViewController 


    vc.label = self.titles[indexPath!.row] 
    // add the folloing line 

    vc.MediaStr = self. imagecollection[indexPath!.row] 

} 

Шаг-3

для загрузки изображений с целью

import SDWebImage 

class DetailViewController: UIViewController { 

var MediaStr: String 
    var label: String 


override func viewDidLoad() { 
    super.viewDidLoad() 

    print (MediaStr) 

    if let imagestring = MediaStr 
    { 


yourImageViewName_setImageWithURL(NSURL(string: imagestring), placeholderImage: UIImage(named: "loading.gif"), options: SDWebImageOptions.ProgressiveDownload, completed: nil) 
    } 
} 

} 
+0

chek ответ, если вам нужна помощь, спросите меня –

+0

большое вам спасибо. Теперь я могу отобразить изображение. большое спасибо. У меня есть еще одна проблема, если бы вы были рады, если бы вы смогли мне помочь. Прямо сейчас я показываю около 100 изображений в моем CollectionView. Но я хочу отображать только 10 изображений, и когда пользователь достигает пользователя в конце 10 изображений, я хочу загрузить еще 10 изображений. Является ли это возможным? –

+0

ya возможно его имя Lazy loading, seach один раз в google, вы получите ответ, иначе я вам поможем, –

Смежные вопросы