2016-05-28 1 views
2

J'ai une UICollectionView dans un contrôleur de vue. Lorsque l'utilisateur clique sur l'une des images, il va sur une page distincte pour ouvrir l'image. Je voudrais plutôt retourner à la galerie à chaque fois pour changer de photo, glisser vers la gauche ou la droite pour obtenir l'image suivante ou précédente.UICollectionView défilement/glisser vers l'élément suivant swift

J'ai vu des réponses à faire "pagingEnabled = true" mais où mettez-vous cela exactement?

Je suis nouveau à swift.

Voici mon code. Merci pour l'aide à l'avance.

ViewController.swift

import UIKit 

class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate 
{ 
@IBOutlet weak var collectionView: UICollectionView! 

let appleProducts = ["iPhone", "Apple Watch", "Mac", "iPad"] 
let imageArray = [UIImage(named: "pug"), UIImage(named: "pug2"), UIImage(named: "pug3"), UIImage(named: "pug4")] 

override func viewDidLoad() 
{ 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() 
{ 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
{ 
    return self.appleProducts.count 
} 

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
{ 

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

    cell.imageView?.image = self.imageArray[indexPath.row] 

    cell.titleLabel?.text = self.appleProducts[indexPath.row] 

    return cell 

} 

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) 
{ 
    self.performSegueWithIdentifier("showImage", sender: self) 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
{ 
    if segue.identifier == "showImage" 
    { 
     let indexPaths = self.collectionView!.indexPathsForSelectedItems()! 
     let indexPath = indexPaths[0] as NSIndexPath 
     let vc = segue.destinationViewController as! NewViewController 
     vc.image = self.imageArray[indexPath.row]! 
     vc.title = self.appleProducts[indexPath.row] 
    } 
} 

} 

CollectionViewCell.swift

import UIKit 

class CollectionViewCell: UICollectionViewCell 
{ 
@IBOutlet weak var imageView: UIImageView! 
@IBOutlet weak var titleLabel: UILabel! 
} 

NewViewController.swift

import UIKit 

class NewViewController: UIViewController 
{ 
@IBOutlet weak var imageView: UIImageView! 
var image = UIImage() 

override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    self.imageView.image = self.image 
} 

override func didReceiveMemoryWarning() 
{ 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


/* 
// MARK: - Navigation 

// In a storyboard-based application, you will often want to do a little preparation before navigation 
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    // Get the new view controller using segue.destinationViewController. 
    // Pass the selected object to the new view controller. 
} 
*/ 

} 

Répondre

0

Dans le contrôleur de vue qui est présenté après un robinet, vous devez faire horizontalement défilement UICollectionView. Dans cette vue de collection, définissez sa propriété pagingEnabled sur true. La prochaine chose à faire est de reformater votre méthode prepareForSegue dans votre contrôleur de vue parent pour transmettre la totalité du tableau d'images au contrôleur de vue présenté ainsi que le chemin d'index sélectionné. Puis, dans votre contrôleur de vue présenté, vous devez configurer la source de données de la vue de collection pour qu'elle affiche toutes les images, mais veillez à démarrer au premier chemin d'index sélectionné par le contrôleur de vue parent.