Использование CollectionView в UIView с файлом xib

Я делаю с этим, я хочу использовать CollectionView, но я не видел прототип ячейки, и не знаю, как использовать CollectionView в этом случае, может кто-нибудь мне помочь ?

Я пытаюсь использовать так, но это занимает много времени и трудно управлять, чем UICollectionView

enter image description here

2 ответов


основной способ использования UICollectionView заключается в программном управлении логикой.

  1. сначала создайте новый класс, который наследуется от UICollectionViewCell. Выберите, хотите ли вы включить xib, чтобы легко создать свою ячейку: enter image description here

  2. создайте свою ячейку с помощью Interface Builder или программно.

  3. Создайте ваш главный регулятор взгляда включая xib (или раскадровку) с посмотреть коллекцию внутри и связать его с соответствующим классом через Interface Builder. Кроме того, вы можете добавить представление коллекции программно в свой UIViewController

enter image description here

  1. сделать контроллер вида цели соответствовать UICollectionViewDelegate и UICollectionViewDataSource протоколы объявляя их после занятий отца:

    class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {
    
        @IBOutlet weak var collectionView: UICollectionView!
    
        //...
    } 
    
  2. зарегистрируйте связанный nib или класс для твоя камера в viewDidLoad метод и связать источник данных и делегировать протоколы в класс контроллера вида:

     let cellIdentifier = "cellIdentifier"
    
     override func viewDidLoad() {
         super.viewDidLoad()
         //if you use xibs:
          self.collectionView.register(UINib(nibName:"MyCollectionCell", bundle: nil), forCellWithReuseIdentifier: cellIdentifier)
         //or if you use class:
          self.collectionView.register(MyCollectionCell.self, forCellWithReuseIdentifier: cellIdentifier)
    
          self.collectionView.delegate = self
          self.collectionView.dataSource = self
     }
    
  3. реализовать методы, объявленные в UICollectionViewDelegate и UICollectionViewDataSource протоколы :

     let objects = ["Cat", "Dog", "Fish"]
    
     func numberOfSections(in collectionView: UICollectionView) -> Int {
           return 1
     }
    
     func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
           return self.objects.count
     }
    
     func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    
           let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellIdentifier, for: indexPath) as! MyCollectionCell
    
           //in this example I added a label named "title" into the MyCollectionCell class
           cell.title.text = self.objects[indexPath.item]
    
           return cell
     }
    
  4. запустить приложение в симуляторе (или на реальном устройстве) и.. Вуаля! :)

enter image description here

подробнее: https://developer.apple.com/reference/uikit/uicollectionview


ok сначала вы должны иметь IBOutlet вашего представления коллекции и реализует такие методы, как это

class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource,UICollectionViewDelegateFlowLayout{



    @IBOutlet var collectionView: UICollectionView!

    override func viewDidLoad() {

        super.viewDidLoad()
        count = 9;
        let nib = UINib(nibName: "yourItemView", bundle: nil)
        collectionView.registerNib(nib, forCellWithReuseIdentifier: "yourItemView")
        self.collectionView.delegate = self
        self.collectionView.dataSource = self


    }

ok в функции вы добавляете xib-файл, затем вы должны создать это расширение из UICollectionViewCell, и когда вы закончите это, вы должны переопределить следующие методы

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return count 
        // the numbers of items
    }

    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {//size of your item for screen sizes
        let wsize = UIScreen.mainScreen().bounds.size.width
        switch(wsize){
        case 414:
            return CGSize(width: 190, height: 102)
        case 375:
            return CGSize(width: 190, height: 102)
        case 320:
            return CGSize(width: 174, height: 102)
        default:
            return CGSize(width: 174, height: 102)
        }
    }



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

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



        return cell
    }

и это все, удачи