представление коллекции не вызывается в методе cellForItemAt в быстром - PullRequest
0 голосов
/ 09 июля 2020

второе представление коллекции не вызывается в методе cellForItemAt, щелкните здесь, чтобы увидеть изображение моего представления

настройка делегата и источника данных для моего представления коллекции:

@IBOutlet weak var slidecollection: UICollectionView!
{
   didSet{
       self.slidecollection.delegate = self;
       self.slidecollection.dataSource = self
   }
}

в viewDidLoad Я регистрирую свое представление сопоставления:

slidecollection.register(UINib(nibName: "SlidemenuCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "Cell")

, и это в методе cellForItemAt, строка if (collectionView == slidecollection) {} не работает! :

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
     if (collectionView == CategoryCollectionView){
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CatagoryCollectionViewCell
            cell.update(Catagory: self.CategoryArray[indexPath.row])
        return cell
        
    }else if (collectionView == ProductsCollectionView){
        
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! ProductsCollectionViewCell
        
        return cell
     }else if (collectionView == slidecollection){
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! SlidemenuCollectionViewCell
        return cell
    }
    return UICollectionViewCell()
}

1 Ответ

0 голосов
/ 10 июля 2020

Похоже, у вас несколько проблем.

Каждый collectionView должен иметь свой делегат и источник данных, установленные в viewDidLoad или внутри Interface Builder. Каждая ячейка должна иметь свой уникальный идентификатор ячейки. В том виде, в котором это есть сейчас, все они имеют один и тот же точный идентификатор ячейки, который равен "Cell"

Почему бы просто не иметь 1 collectionView, который имеет 3 разных типа ячеек, и обновлять ячейку в зависимости от того, какое условие выполнено

@IBOutlet weak var mainCollectionView: UICollectionView!

let categoryCellId = "CategoryCollectionViewCell"
let productsCellId = "ProductsCollectionViewCell"
let slideMenuCellId = "SlidemenuCollectionViewCell"

viewDidLoad() {

    mainCollection.delegate = self
    mainCollection.datasource = self

    // register your 3 nibs with this one cv
    mainCollectionView.register(UINib(nibName: "CategoryCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: self.categoryCellId)

    mainCollectionView.register(UINib(nibName: "ProductsCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: self.productsCellId)

    mainCollectionView.register(UINib(nibName: "SlidemenuCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: self.slideMenuCellId)
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    if someConditionOccurs {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: self.categoryCellId, for: indexPath) as! CategoryCollectionViewCell
        // update cell ...
        return cell
    }

    if anotherCondtionOccurs {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: self.productsCellId, for: indexPath) as! ProductsCollectionViewCell
        // update cell ...
        return cell
    }

    if a differntConditionOccurs {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: self.slideMenuCellId, for: indexPath) as! SlidemenuCollectionViewCell
        // update cell ...
        return cell
    }

    return UICollectionViewCell()
}

Если ячейки разного размера, вам нужно будет использовать один и тот же лог c внутри sizeForItem. Для выделения используйте те же логи c в didSelectItem

Вы также можете разделить их на разделы вместо отдельных коллекций

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...