uitableview subview: почему этот uilabel не виден? - PullRequest
1 голос
/ 16 сентября 2009

Я хочу отобразить метку, показывающую число в каждой ячейке таблицы, но метка видна только при нажатии на строку (когда ячейка подсвечена)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UILabel *label;
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        label = [[UILabel alloc] initWithFrame:CGRectMake(200,10, 15, 15)];
        label.tag = 1;
        [cell.contentView addSubview:label];
        [label release];
    }
    else {
        label = (UILabel *)[cell viewWithTag:1];   
    }
    if (indexPath.row == 0) {
        cell.textLabel.text = @"Photos";
        label.text = [NSString stringWithFormat:@"%d",1];
    }
    return cell;
}

Ответы [ 4 ]

4 голосов
/ 27 июля 2010

У меня была та же проблема, и она была решена путем установки текста для текстовой метки ПЕРЕД добавлением пользовательской метки в качестве подпредставления.

...
cell.textLabel.text = @"X";
...
[cell.contentView addSubview:label]
1 голос
/ 16 сентября 2009

Когда вы обновляете textLabel свойство UITableViewCell, оно лениво создает UILabel и добавляет его в подпредставления ячейки. Обычно вы не будете использовать комбинацию textLabel и добавление подпредставлений к contentView, но если вам нужно, убедитесь, что представление textLabel не размещено поверх ваших contentView подпредставлений. *

0 голосов
/ 21 декабря 2015

Использование пользовательского UITableViewCell дает вам больший контроль над макетом ячейки. Добавьте пользовательские представления в contentView ячейки в подклассе и переопределите layoutSubviews, чтобы установить порядок подвидов:

- (void)layoutSubviews {
    [super layoutSubviews];
    [self.contentView bringSubviewToFront:self.yourCustomView];
}
0 голосов
/ 16 сентября 2009

Во-первых, я предполагаю, что это нацеливание на 3.0. Apple изменила способ создания UITableViewCells в 3.0, и вам следует перейти к этому. -initWithFrame:reuseIdentifier: устарело.

Тем не менее, вероятная проблема заключается в том, что встроенный textLabel мешает добавленной вами метке, возможно, перекрывается. Сначала вы должны посмотреть, отвечает ли один из новых встроенных стилей вашим потребностям. Если нет, то я бы порекомендовал либо просто использовать ваши собственные представления, либо использовать только встроенные представления, возможно, переставив их. Если вы хотите переставить их, Apple предлагает разделить ячейку на подклассы и перегрузить -layoutSubviews. Я также считаю, что -tableView:willDisplayCell:forRowAtIndexPath: - хорошее место для окончательного размещения ячеек без подклассов.

...