0

Ich versuche, ein PageControl für Bilder in einer CollectionViewCell anzuzeigen.Verwenden von PageControl in einer CollectionViewCell auf einem ViewController

Alles scheint korrekt zu funktionieren - die Anzahl der Seiten ist korrekt und selbst der Ausdruck (currentPage) zeigt den korrekten Index; das PageControl zeigt jedoch nicht die richtige aktuelle Seite an.

EncounterDetailViewController.swift

class EncounterDetailViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UIScrollViewDelegate { 

// MARK: - Properties 
var selectedEncounter: Encounter? 
var currentPage = 0 

// MARK: - UICollectionViewDataSource 
func numberOfSections(in collectionView: UICollectionView) -> Int { 
    return 1 
} 

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return (selectedEncounter?.images.count)! 
} 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "imageCell", for: indexPath) as! EncounterCollectionViewCell 

    cell.imageView.sd_setImage(with: URL(string: (selectedEncounter?.images[indexPath.row])!)) 
    cell.pageControl.numberOfPages = (selectedEncounter?.images.count)! 
    cell.pageControl.currentPage = self.currentPage 

    return cell 
} 

// MARK: - ScrollView Delegate Method 
func scrollViewDidScroll(_ scrollView: UIScrollView) { 
    let pageWidth = scrollView.frame.width 
    self.currentPage = Int((scrollView.contentOffset.x + pageWidth/2)/pageWidth) 
    print(currentPage) 
} 

} 

EncounterCollectionViewCell.swift

class EncounterCollectionViewCell: UICollectionViewCell { 

    // MARK: - Outlets 
    @IBOutlet weak var imageView: UIImageView! 
    @IBOutlet weak var pageControl: UIPageControl! 

} 
+0

Welche Seite zeigt das 'pageControl'? –

+0

Sie haben ein 'pageControl', aber Sie berechnen' currentPage' basierend auf dem 'collectionView'' contentOffset'. Warum? –

+0

Ich versuche, die pageControls currentPage basierend auf jedem horizontalen Bildlauf zu ändern. – pmanning

Antwort

0

Nicht sicher, ob es die beste Praxis Art und Weise, aber ich verbinden die Pagecontrol Innenseite meiner EncounterDetailViewController anstelle der Zelle.

class EncounterDetailViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UIScrollViewDelegate { 

    @IBOutlet weak var pageControl: UIPageControl! 

    // MARK: - Properties 
    var currentPage = 0 

    // MARK: - View did load 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.pageControl.numberOfPages = (selectedEncounter?.images.count)! 

    } 

    // MARK: - ScrollView Delegate Method 
func scrollViewDidScroll(_ scrollView: UIScrollView) { 
    let pageWidth = scrollView.frame.width 
    self.currentPage = Int((scrollView.contentOffset.x + pageWidth/2)/pageWidth) 
    self.pageControl.currentPage = self.currentPage 
} 
} 
Verwandte Themen