Using CollectionView in UIView with xib file

后端 未结 2 1665
广开言路
广开言路 2020-12-08 11:41

i\'m doing with this, i want to use CollectionView, but i haven\'t seen prototype cell, and don\'t know how to use CollectionView in this case, can someone help me ?

相关标签:
2条回答
  • 2020-12-08 12:15

    The main way to use UICollectionView is by managing the logic programmatically.

    1. First, create a new class which inherits from UICollectionViewCell. Choose if you want to include a xib to easily design your cell:

    2. Design your cell with Interface Builder or programmatically.

    3. Create your main view controller including a xib (or a storyboard) with the collection view inside and link it to the associated class via Interface Builder. Alternatively you can add a collection view programmatically to your UIViewController

    1. Make the target view controller conform to the UICollectionViewDelegate and UICollectionViewDataSource protocols by declaring them after the father class:

      class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {
      
          @IBOutlet weak var collectionView: UICollectionView!
      
          //...
      } 
      
    2. Register the associated nib or the class for your cell in the viewDidLoad method and associate the datasource and delegate protocols to the view controller class:

       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. Implement the methods declared in the UICollectionViewDelegate and UICollectionViewDataSource protocols :

       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. Run your app in the simulator (or on a real device) and.. Et voilà! :)

    For more info: https://developer.apple.com/reference/uikit/uicollectionview

    0 讨论(0)
  • 2020-12-08 12:26

    ok first you must have the IBOutlet of your collection view and implements the methods like this

    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 in the function you add a xib file, next you must create that extend from UICollectionViewCell, and when you finish this you must override the next methods

    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
        }
    

    and this is all, good luck

    0 讨论(0)
提交回复
热议问题