iOS: пользовательский UITableViewCell не отображает данные

Я создал UITableView внутри своего UIViewController и построил прототип ячейки в раскадровке. Я присвоил теги всем элементам в ячейке, которые хочу изменить, и меняю их в коде.

Когда вызывается (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath, мои данные обрабатываются, и я вижу, как появляется ячейка с красным цветом фона, который я установил в раскадровке, однако изображения или текст отсутствуют. Я думаю, что проблема с реализацией, но я не могу понять, что я делаю неправильно.

Вот как выглядит раскадровка:

Это соответствующий код:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"CellIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
    }

    if(tableView == youLikeTableView)
    {
        UIView* youLikeImageFrame = (UIView *)[cell.contentView viewWithTag:100];
        UIImageView* youLikeImageView = (UIImageView *)[cell.contentView viewWithTag:101];
        UILabel *youLikeNameLabel = (UILabel *)[cell.contentView viewWithTag:102];

        for(int i = 0; i < [youLike count]; i++)
        {
            youLikeImageFrame.layer.cornerRadius = youLikeImageFrame.frame.size.width / 2;
            [youLikeImageView setImage:[youLikeImages objectAtIndex:i]];
            youLikeImageView.layer.cornerRadius = youLikeImageView.frame.size.width / 2;

            youLikeNameLabel.text = [youLikeName objectAtIndex:i];
        }
    }

    return cell;
}

И это ячейка, появляющаяся без текста или изображений

введите здесь описание изображения


person Sam    schedule 30.12.2015    source источник
comment
Ваша ячейка не инициализирована. Проверьте в mainStoryboard, соответствует ли cellIdentifier идентификатору, который вы хотите использовать.   -  person Lukesivi    schedule 30.12.2015
comment
Это то же самое. В раскадровке это также CellIdentifier   -  person Sam    schedule 30.12.2015
comment
какой класс ячейки? Я предполагаю, что у вас есть отдельный файл пользовательских ячеек?   -  person Lukesivi    schedule 30.12.2015
comment
Стиль устанавливается как пользовательский в раскадровке. У меня нет никаких дополнительных файлов для ячейки.   -  person Sam    schedule 30.12.2015
comment
Создайте подкласс UITableViewCell и добавьте в этот файл элементы пользовательского интерфейса (метки, кнопки и т. д.). Затем щелкните ячейку и добавьте класс в Identity Inspector.   -  person Lukesivi    schedule 30.12.2015
comment
Две вещи, которые стоит попробовать: пройдитесь по этому коду, чтобы увидеть, правильно ли установлены переменные, и используйте отладку просмотра, чтобы захватить экран и проверить, какие объекты отображаются.   -  person Phillip Mills    schedule 30.12.2015
comment
Хотя я лично всегда буду использовать подкласс UITableViewCell, он вам не обязательно нужен.   -  person Hermann Klecker    schedule 30.12.2015


Ответы (1)


вы забыли добавить их в качестве подвида

[cell addSubView:youLikeImageFrame];
[cell addSubView: youLikeImageView]; and 
[cell addSubView: youLikeNameLabel];

как раз перед

return cell;
person Devang Tandel    schedule 30.12.2015
comment
Если бы их еще не было в качестве подпредставлений, viewWithTag: не работало бы. - person Phillip Mills; 30.12.2015
comment
Это фактически устранило проблему. Спасибо. Я не понимаю, почему они не были добавлены автоматически, поскольку они были добавлены в раскадровке поверх ячейки, но теперь это работает. - person Sam; 30.12.2015
comment
Добавив их СНОВА, вы, вероятно, изменили иерархию подвидов или последовательность рисования. Посмотрите на вашу текущую иерархию и на последовательность. например. фон может быть родственным другим элементам представления, но он должен быть нарисован первым. Вы достигаете этого, располагая фон над другими в дереве иерархии представлений, если они находятся на одном иерархическом уровне. - person Hermann Klecker; 30.12.2015
comment
если вы хотите использовать метку и другой объект пользовательского интерфейса из раскадровки, я предлагаю вам использовать пользовательский класс UITableviewCell для вашей ячейки в раскадровке. Здесь объекты пользовательского интерфейса в ячейке приобретут свойство объекта с тегом, но не добавят их в вашу ячейку. - person Devang Tandel; 31.12.2015