Как установить UILabel в UICollectionViewCell

У меня есть приложение с UIViewController с UICollectionView IBOutlet в нем.

MyCustomCell Outlet подключенMyCustomCell ReuseIDMyCustomCell Class Identity

Ячейка в UICollectionView - это MyCustomCell, и этот метод устанавливает ее UILabel:

-(void)setCellLabel:(NSString *)value{
    NSLog(@"settinglabel");
    cellLabel.text = @"hardcode"; //added for testing purposes
}

Ячейка имеет тип свойства Class, идентифицирующий ее как MyCustomCell в раскадровке, а также идентификатор ее очереди. UIViewController принимает источники данных и протоколы делегатов. У выхода IBOutlet UILabel есть выход cellLabel, подключенный к раскадровке. Методы определены как:

- (void)viewDidLoad{
    [super viewDidLoad];
    self.restNames = @[@"Orange",@"Naranja",@"Narnia"];

    [self.collectionView registerClass:[MyCustomCell class] forCellWithReuseIdentifier:@"MyCustomCellID"];

}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    NSLog(@"%d",[self.restNames count]);
    return [self.restNames count];
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{

    MyCustomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];


    [cell setCellLabel:@"hi"];
    NSLog(@"fitsname %@",[self.restNames objectAtIndex:indexPath.row]);


    return cell;
}

Я получаю три ячейки в моем виде таблицы, соответствующие 3 объектам в моем массиве. Массив просто содержит строковые объекты, которые я устанавливал непосредственно с помощью objectAtIndexPath, но я решил установить его непосредственно в @"hi", так как он не работал. Я даже изменил значение, используемое в методе setCellLabel, на жестко закодированное значение, и я продолжаю получать только строку "Метка" по умолчанию в каждой ячейке.

Почему cellLabel не настроен правильно?

3 ответа

Решение

У вас есть выход cellLabel, установленный в конструкторе интерфейсов?

У вас должно быть что-то вроде этого в файле.h вашей ячейки:

@property (weak, nonatomic) IBOutlet UILabel *cellLabel;

тогда позже вам действительно нужно сделать это:

cell.cellLabel.text = @"";

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

[self.collectionView registerClass:[UICollectionView class] forCellWithReuseIdentifier:CellIdentifier];

Но раскадровка уже зарегистрировала это. Так что в основном это то, что вам нужно сделать, чтобы создать пользовательскую раскадровку на основе UICollectionView:

  1. Создайте свой UICollectionViewController подкласс
  2. Нажмите и перетащите UICollectionViewController на раскадровку и измените конфигурацию, как вы хотите
  3. Создать UICollectionViewCell подкласс
  4. Установите класс ячейки в раскадровке, установите идентификатор для повторного использования.
  5. Удалить [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier: CellIdentifier];
  6. Установите статический идентификатор повторного использования в UICollectionView подкласс

Вы, вероятно, забыли рассказать своим UICollectionView какой класс он должен использовать для создания ячеек. Это делается с помощью следующей строки кода:

[self.collectionView registerClass:[MyCustomCell class] forCellWithReuseIdentifier: CellIdentifier];

Вы можете установить это в конце viewDidLoad вашего контроллера.

Другие вопросы по тегам