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

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

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

введите описание изображения здесь

Ответ 1

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

  • Сначала создайте новый класс, который наследуется от UICollectionViewCell. Выберите, если вы хотите включить xib для легкой разработки вашей ячейки: введите описание изображения здесь

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

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

введите описание изображения здесь

  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. Запустите приложение в симуляторе (или на реальном устройстве) и.. Et voilà!:)

введите описание изображения здесь

Для получения дополнительной информации: https://developer.apple.com/reference/uikit/uicollectionview

Ответ 2

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
    }

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

Ответ 3

Я сделал это так же. Создан отдельный xib файл. На главном экране добавлен collectionview в xib. Затем создание класса и xib для collectionViewCell. Но методы делегата collectionview не вызываются.