UICollectionView registerCell - пустые ячейки

Мы только начинаем играть с UICollectionView в первый раз. Кажется, работает хорошо, но есть проблема и вопрос об этом.

У меня есть настройки UICollectionView, как показано ниже, и с пользовательской ячейкой:

- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section
{
    return 10;
}

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

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    ContactCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
    cell.nameLbl.text = @"text";

    return cell;
}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake(145, 95);
}

- (UIEdgeInsets)collectionView:
(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{
    return UIEdgeInsetsMake(10, 10, 10, 10);
}

Так что это все денди, однако я добавил эту строку в:viewDidLoad

[collectionView registerClass:[ContactCell class] forCellWithReuseIdentifier:@"Cell"];

Это вызывает проблемы, и я нене понимаю почему. Когда я включаю эту строку, все мои ячейки становятся пустыми. Как так? Что мне не хватает?

Кроме того, насколько я понимаю, если эта строка включает многократно используемые ячейки, почему я должен делать это с представлением коллекции, а не с представлением таблицы?

 Josh Kahane05 нояб. 2012 г., 01:35
Я установил это в моем Раскадровке. У меня есть UICollectionView с одной ячейкой, эта ячейка имеет свой идентификатор, подключенный пользовательский класс и метку.
 jackslash05 нояб. 2012 г., 01:31
как вы настраиваете вид для ячейки? программно в вашем подклассе?

Ответы на вопрос(2)

Удалить

[self.collectionview registerClass:[NewCell class] forCellWithReuseIdentifier:@"Cell"];

Для раскадровки мы неэта линия не нужна

 Ofir Malachi29 авг. 2017 г., 21:38
Да, это Ответ √
Решение Вопроса

Ваша раскадровка автоматически регистрирует ячейку, которую вы разработали в раскадровке, для идентификатора повторного использования, который вы указали для этой ячейки в правой панели в конструкторе интерфейса. Перерегистрируя ваш класс для этого идентификатора повторного использования, представление коллекции просто вызывает alloc init для вашего подкласса и ожидает, что представление будет настроено программно.

Отдокументация:

Если вы ранее зарегистрировали файл класса или пера с тем же идентификатором повторного использования, класс, указанный в параметре cellClass, заменит старую запись. Вы можете указать nil для cellClass, если хотите отменить регистрацию класса по указанному идентификатору повторного использования.

Если вы хотите создать клеткиза пределами раскадровки Вы можете либо настроить свой интерфейс программно, либо настроить ячейку в отдельном xib, а затем вызвать

- (void)registerNib:(UINib *)nib forCellWithReuseIdentifier:(NSString *)identifier

Где перо должно иметь одно представление верхнего уровня, которое является ячейкой вашего пользовательского подкласса с правильным идентификатором повторного использования, установленным в конструкторе интерфейса.

 Josh Kahane05 нояб. 2012 г., 02:09
Хорошо яЯ счастлив, создавая их в раскадровке, и сделал это. Но я не понимаю, почему при вызове `registerClass ' метод, конечно, делает их многоразовыми, так что вычеркивает мои клетки. Но почему я не вижутекст" ярлык, который я установил? Если я очищу свои клетки, где я буду их заселять?
 Josh Kahane05 нояб. 2012 г., 02:16
Ах да, ну, теперь это гораздо больше смысла, спасибо. Таким образом, по сути, необходимость называть это чисто на основе моего подхода? Хочу ли я создавать дизайн в своем раскадровке или использовать более программный подход, верно?
 Josh Kahane05 нояб. 2012 г., 01:54
То есть, вы говорите, что я могу только визуально спроектировать свою ячейку из xib и использовать предложенный вами метод, иначе я должен создать ее программно?
 jackslash05 нояб. 2012 г., 02:13
это не делает их многоразовыми, в отличие от того, чтобы их не использовать повторно, они всегда были многоразовыми. Причина, по которой они пропадают, заключается в том, что нигде в вашем классе вы не добавили метку в качестве подпредставления. Это было сделано в многократно используемой ячейке раскадровки.
 jackslash05 нояб. 2012 г., 02:18
Да, при разработке повторно используемых ячеек в раскадровке вам не нужно вызывать этот метод, потому что раскадровка позаботится об этом за вас. Все клетки многоразовые. Метод существует для тех, кто хочет создать свои ячейки другими способами.
 jackslash05 нояб. 2012 г., 02:15
к чему это сводится, вам не нужно звонитьregisterClass: потому что он уже был вызван для вас раскадровкой.
 jackslash05 нояб. 2012 г., 01:58
вот почему он гаснет, когда вы звонитеregisterClass:, вы'перезаписать то, что вы сделали в раскадровке. Это также, почему это работает без линии. Представления коллекции не будут функционировать без указания какой-либо повторно используемой ячейки
 Josh Kahane05 нояб. 2012 г., 02:20
Круто, спасибо за помощь и объяснение, куча помощи.
 jackslash05 нояб. 2012 г., 01:55
или вы можете создать их в раскадровке, добавив клетки-прототипы в представление коллекции. раскадровка автоматически регистрирует эту ячейку, и ее повторное использование включено.

Ваш ответ на вопрос