2017-06-09 3 views
0

Ich versuche, meine UICollectionView in meiner benutzerdefinierten UIView zu haben, kann zu einer Seite blättern, wenn eine Taste in der Haupt-VC gedrückt wird. Leider stürzt ich jedes Mal, wenn ich die Methode im MainVC anrufe, ab, @, um scrollToItem.UICollectionView ScrollTo Abstürzen

Hier ist mein MainVC.

let mainView = MainViewsHome() 

Im ViewWillAppear:

/** Setting up the bottom half **/ 
     mainView.frame = CGRect(x:self.view.frame.width * 0, y:self.view.frame.height/6.2, width:self.view.frame.width,height:self.view.frame.height/1.1925) 
     mainView.backgroundColor = UIColor.clear 
     self.view.addSubview(mainView) 

& & Meine benutzerdefinierte UIView

class MainViewsHome: UIView, UIGestureRecognizerDelegate, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout { 

    var cellId = "Cell" 

    var collectionView : UICollectionView! 


    override init(frame: CGRect) { 

     super.init(frame: CGRect(x:0, y:0, width:UIScreen.main.bounds.width, height: UIScreen.main.bounds.height/1.3)) 

     /**Creation of the View **/ 
     let flowLayout : UICollectionViewFlowLayout = UICollectionViewFlowLayout() 
     flowLayout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0) 
     flowLayout.scrollDirection = .horizontal 

     let collectionView = UICollectionView(frame: CGRect(x:self.frame.width * 0,y:self.frame.height * 0,width:self.frame.width,height: self.frame.height), collectionViewLayout: flowLayout) 
     collectionView.register(uploadGenreSelectionCVC.self, forCellWithReuseIdentifier: cellId) 
     collectionView.isPagingEnabled = true 
     collectionView.delegate = self 
     collectionView.dataSource = self 
     collectionView.backgroundColor = UIColor.purple 

     self.addSubview(collectionView) 

    } 


    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    func moveToPage() { 
    print("we are moving to page") 

     self.collectionView.scrollToItem(at: 2 as IndexPath, at: UICollectionViewScrollPosition.right, animated: true) 

    } 

& & Da ist in meinem MainVC Ich rufe: mainView.moveToPage() Wo ich mit meinem Verständnis falsch werde?

+0

können Sie bitte den Absturz posten? – Siriss

Antwort

1

Problem ist mit 2 as IndexPath, IndexPath ist nicht Integer so müssen Sie init(item:section:) das Objekt von IndexPath mit seiner init machen. und danach blättern Sie collectionView zu bestimmten Artikel auf diese Weise.

func moveToPage() { 
    let indexPath = IndexPath(item: 2, section: 0) //Change section from 0 to other if you are having multiple sections 
    self.collectionView.scrollToItem(at: indexPath, at: .right, animated: true) 
} 

Hinweis:CollectionView's Artikel bei 0 Index beginnen also, wenn Sie in den 2. Artikel blättern wollen, dann indexPathIndexPath(item: 1, section: 0) weil 2nd mit machen bei der 3. Zelle collectionView blättern.

+0

Der Absturz gestoppt, aber die Zelle bewegt sich nicht darauf? Muss ich Informationen über einen Delegierten austauschen? – AndrewS

+0

@AndrewS Können Sie weitere Details zeigen, teilen Sie auch einige Screenshots des laufenden Bildschirms, wie es aussieht –

+0

https://paste.ee/p/6YwOr || https://paste.ee/p/Nlzt0 das sind die beiden Klassen und hier ist ein Bild davon, wie es auf meinem Bildschirm aussieht http://imgur.com/a/w0BE0, die 4 blauen Kästchen an der Spitze sind die Tab-Leiste, und der blaue Bildschirm ist die benutzerdefinierte Seiten, die ich habe, – AndrewS