2016-06-01 2 views
1

У меня есть два UICollectionViews в частности UIViewController, и я хочу иметь другое количество разделов в двух из них. Я пробовал это следующим образом:Количество разделов в виде коллекции

- (NSInteger)numberOfSectionsInCollectionView: (UICollectionView *)collectionView { 
if (collectionView == self.firstcollectionView) { 
    return objects.count + 1; 
    } 
else 
    { 
    return 1; 
    } 
} 

Но по какой-то причине это не работает.

Также попробовал его с тегами, но так и не смог заставить его работать.

- (NSInteger)numberOfSectionsInCollectionView: (UICollectionView *)collectionView { 
if (collectionView.tag == 1) { 
    return objects.count + 1; 
    } 
else 
    { 
    return 1; 
    } 
} 

Он всегда показывает один раздел как UICollectionViews, когда я был в состоянии проверить, что есть один объект, который должен означать, что будет 2 секции в первом UICollectionView

UPDATE 1: On отладка кажется, что контроль никогда не возвращается в if-case return 1 всегда.

ОБНОВЛЕНИЕ 2: Условие if, где проблема. Он никогда не удовлетворен.

UPDATE 3: Я смог получить if-else, выполнив объявление UICollectionViews как переменной класса, а не как свойство. Количество секций все еще равно 1 для UICollectionViews.

- (NSInteger)numberOfSectionsInCollectionView: (UICollectionView *)collectionView { 
if (collectionView == cardscollectionView) { 
    return 2; 
    } 
else 
    { 
    return 1; 
    } 
} 

По-прежнему не работает. Хотя это

- (NSInteger)numberOfSectionsInCollectionView: (UICollectionView *)collectionView { 
    return 2; 
} 

работал просто отлично. Просто чтобы проиллюстрировать макеты, все в порядке, и 2 ячейки отображаются в обоих представлениях коллекции.

ОБРАЗЕЦ ПРОЕКТА (на огромный спрос: D) -

https://github.com/genaks/UIICollectionView-Sections

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

+0

после проверки ссылки ссылки от xib, правильно ли он подключен или нет? –

+0

Это .. Ячейка загружается просто отлично .. Это количество секций, которые перепутались – genaks

+0

Да, ваше состояние if (collectionView == self.firstcollectionView) в порядке, я думаю, что на него не ссылаются xib –

ответ

3

Убедитесь, что вы установили делегат и источник данных самостоятельно для оба вида сбора, такие как

self.firstcollectionView.delegate = self; 
    self.firstcollectionView.datasource = self; 

И то же самое для второго сбора.

И убедитесь, что вы правильно подключили свою розетку.

или

Убедитесь, что вы настраиваете тег правильно

Update:

- (NSInteger)numberOfSectionsInCollectionView: (UICollectionView *)collectionView { 

if (collectionView == self.cardscollectionView) { 

    NSLog(@"getting called. It is cardcollerctionView"); 
    return 2; 

} 
if (collectionView == self.bankscollectionView) { 
    NSLog(@"getting called. it is bankcollectionView"); 
    return 1; 
} 

else 
{ 
    return 1; 


} 

    //use above or below both are working fine. 
    //******************************* OR ******************************************** 

    if (collectionView == self.cardscollectionView) { 

     NSLog(@"getting called. It is cardcollerctionView"); 
     return 2; 

    } 
    else 
    { 
     NSLog(@"it is else"); 
     return 1; 


    } 

} 

Я запустить свой демо, и это отлично работает. Я обновил ответ с помощью метода numberofsection. обе части кода работают. Убедитесь, что вы не используете то же UICollectionViewLayout для обоего collectionViews

Надеются, что это поможет :)

+0

[self.firstcollectionView setDataSource: self]; [self.firstcollectionView setDelegate: self]; должны делать то же самое право? – genaks

+0

Да, это то же самое. положить точку останова в методе делегата и источника данных и отладить и проверить, что он вызван или нет. при необходимости распечатать источник данных. убедитесь, что 'objects.count' не 0 – Lion

+0

objects.count равен 1. Сначала он равен 0, но он равен 1 после загрузки элементов из сети – genaks

0

I думаю, что вы не будете устанавливать теги правильно, Сначала установите тег в viewDidLoad: метод, пример ниже,

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // put your code... 
    firstCollectionView.tag = 10000; 
    secondCollectioView.tag = 9000; 
} 

или набор тег в раскадровке ниже,

enter image description here

тогда вы будете проверять состояние является

-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView 
{ 
    if (collectionView.tag == 9000) { 
     return 1; 
    } else { 
     return objects.count + 1;; 
    } 

} 

надеется его полезным

0

Это, безусловно, работает. Попробуй.

-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView*)collectionView 
{ 
     if([collectionView isEqual:self.firstcollectionView]){ 
      //return object count for firstCollectionView; 
     } 
     else if([collectionView isEqual:self.secondCollectionView]) 
     { 
      //return object count for secondCollectionView; 
     } 
} 
+0

Я боюсь, что это не – genaks

+0

@genaks проверьте, установлен ли источник данных для обеих коллекций Просмотров –

+0

Я установил оба представления коллекции Sushree – genaks

0

Ваш первоначальный метод проверки UICollectionView сек идентичность без тегов делает работу и является более надежной, чем использование тегов, но если посчитать объекты равно 0, то секции подсчитывать все равно будет то же самое. Вы упомянули, что count изначально 0, затем 1 после загрузки элементов из Интернета. Вы вызываете reloadData() в коллекцииViews после того, как веб-загрузка завершена ?.

Вот полный рабочий пример с двумя UICollectionView сек, созданных в коде (без какой-либо веба-выборки), который работает с различными подсчетами раздела:

class CustomCell: UICollectionViewCell {} 

class DoubleViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource { 

var firstCollectionView: UICollectionView = { 
    let layout = UICollectionViewFlowLayout() 
    let v = UICollectionView(frame: CGRectZero, collectionViewLayout: layout) 
    v.translatesAutoresizingMaskIntoConstraints = false 
    v.registerClass(CustomCell.self, forCellWithReuseIdentifier: "CustomCell") 
    return v 
}() 

var secondCollectionView: UICollectionView = { 
    let layout = UICollectionViewFlowLayout() 
    let v = UICollectionView(frame: CGRectZero, collectionViewLayout: layout) 
    v.translatesAutoresizingMaskIntoConstraints = false 
    v.registerClass(CustomCell.self, forCellWithReuseIdentifier: "CustomCell") 
    return v 
}() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.view.addSubview(self.firstCollectionView) 
    self.view.addSubview(self.secondCollectionView) 
    self.firstCollectionView.delegate = self 
    self.secondCollectionView.delegate = self 
    self.firstCollectionView.dataSource = self 
    self.secondCollectionView.dataSource = self 
} 

func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { 
    if collectionView == self.firstCollectionView { 
     return 1 
    } 
    return 2 
} 

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return 5 
} 

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("CustomCell", forIndexPath: indexPath) as! CustomCell 
    cell.backgroundColor = randomColor() 
    return cell 
} 

override func updateViewConstraints() { 
    super.updateViewConstraints() 
    self.firstCollectionView.leadingAnchor.constraintEqualToAnchor(self.view.leadingAnchor).active = true 
    self.firstCollectionView.trailingAnchor.constraintEqualToAnchor(self.view.trailingAnchor).active = true 
    self.firstCollectionView.bottomAnchor.constraintEqualToAnchor(self.secondCollectionView.topAnchor).active = true 
    self.firstCollectionView.topAnchor.constraintEqualToAnchor(self.topLayoutGuide.bottomAnchor).active = true 
    self.secondCollectionView.bottomAnchor.constraintEqualToAnchor(self.bottomLayoutGuide.topAnchor).active = true 
    self.secondCollectionView.leadingAnchor.constraintEqualToAnchor(self.view.leadingAnchor).active = true 
    self.secondCollectionView.trailingAnchor.constraintEqualToAnchor(self.view.trailingAnchor).active = true 
    self.firstCollectionView.heightAnchor.constraintEqualToAnchor(self.secondCollectionView.heightAnchor).active = true 
    } 
} 

Дополнительный код ограничения необходим, так как ваш не используя xibs/раскадровки

+0

Я вызвал reloadData() после того, как я загрузил свои данные из Интернета. – genaks

+0

Вы говорите, что уже звонили 'reloadData()', и это не имело никакого значения, или вы попробовали его сейчас, и теперь это изменилось? Мой ответ выше является рабочим образцом и предоставляет количество разделов разделов для каждого вида коллекции. Если у вас все еще есть проблемы, проблема возникает из-за того, что вы не объяснили в своей текущей настройке. –

+0

Я вызываю reloadData() со времени отправки этого вопроса. Я попытаюсь опубликовать образец того, что я делал – genaks

0

Попробуйте это:

- (NSInteger)numberOfSectionsInCollectionView: (UICollectionView *)collectionView 
{ 
    if([collectionView isEqual: collectionView1]) 
    { 
    return CollectionArray1.count; 
    } 
    else if ([collectionView isEqual: collectionView2]) 
    { 
    return CollectionArray2.count; 
    } 
    else 
    { 
    NSLog(@"Dummy Text"); 
    } 
    return 1; 
} 
0

Может быть, ваш cardscollectionView изменился, прежде чем выполнять numberOfSectionsInCollectionView или вы установите делегат неправильно.

Добавить код, чтобы проверить, является ли два делегата collectionViews self.

Правильный журнал две разныеcollectionView адрес и только одинcardscollectionView адрес.

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { 
    NSLog(@"collectionView=%@", collectionView); 
    NSLog(@"cardscollectionView=%@", cardscollectionView); 
    if (collectionView == cardscollectionView) { 
     return 2; 
    } else{ 
     return 1; 
    } 
} 
+0

условия if-else работают нормально. – genaks

0

Проблема заключалась в том, что я использовал тот же UICollectionViewLayout для обоих UICollectionViews. Использование двух разных UICollectionViewLayouts решило проблему для меня. Спасибо всем за помощь. Я собирался сходить с ума от этого.

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