2015-12-02 2 views
0

У меня есть следующий код, который помещает вид коллекции в одну или две колонны, в зависимости от размера экрана:UICollectionView reuseIdentifier в sizeForItemAtIndexPath - быстр

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 
    let size = collectionView.frame.width 
    if (size > 500) { 
     return CGSize(width: (size/2) - 8, height: (size/2) - 8) 
    } 
    return CGSize(width: size, height: size) 
} 

Я хотел бы изменить это, так высота зависит от повторного использования. Есть два я использую - установить что-то вроде этого:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    let diceRoll = Int(arc4random_uniform(2) + 1) 
    var cell = collectionView.dequeueReusableCellWithReuseIdentifier("profileViewCell", forIndexPath: indexPath) 
    if(diceRoll == 1) { 
     cell = collectionView.dequeueReusableCellWithReuseIdentifier("profileChartViewCell", forIndexPath: indexPath) 
    } 
    return cell 
} 

Как я могу получить reuseIndentifier текущей ячейки, так что я могу изменить высоту в зависимости от того, какого типа клетки это?

ответ

0

reuseIdentifier является собственностью UICollectionViewReusableView, что составляет UICollectionViewCell базовый класс. Таким образом, вы можете позвонить cell.reuseIdentifier в любое время, когда у вас есть ячейка.

Я не уверен, каково ваше понятие о «текущей ячейке». Вы можете запросить представление коллекции для данной ячейки по пути индекса с помощью collectionView.cellForItemAtIndexPath(), и вы можете отслеживать, какая ячейка выбрана в настоящий момент, реализовав метод делегата collectionView:didSelectItemAtIndexPath:, а затем сохраняя выбранный вами индексный пакет.

В качестве альтернативы (и то, что я рекомендую) является то, что вы либо подклассом UICollectionViewCell, и подклассовой ячейкой отвечаете за ее собственную высоту, либо реализуете собственный класс UICollectionViewLayout и обрабатываете его размер.

Если вы реализуете свои собственные подклассы ячеек, обязательно вызывайте registerClass:forCellWithReuseIdentifier: на пользовательскую ячейку, так что UICollectionView знает, как ее правильно создать.

Смежные вопросы