Проблема с прозрачным фоном текста в UITableView - PullRequest
1 голос
/ 05 декабря 2009

У меня досадная проблема в виде таблицы. Я смог добиться изменения цвета ячеек (синий / белый / синий / ...), но теперь у меня проблемы с текстом, на синем фоне которого белый фон.

Я пытался протестировать, чтобы установить красный цвет фона:

// try to set the backgroundcolor of the text ???
cell.textLabel.text.backgroundColor = [UIColor redColor];

, который не работает; Хммм.

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


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView 
             cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    }

    // Set up the cell
    cell.textLabel.text=[RssFeedNodes objectAtIndex:indexPath.row];

    // try to set the backgroundcolor of the text ???
    cell.textLabel.text.backgroundColor = [UIColor redColor];


    // show image in cell
    NSString *imageName=@"rss.png";
    cell.imageView.image=[UIImage imageNamed:imageName];

    // changing colors in cells
    NSInteger row = [indexPath row];
    if (row % 2){ 
        cell.contentView.backgroundColor = [UIColor whiteColor];
    }
    else { 
        cell.contentView.backgroundColor = [UIColor colorWithRed:0.90f green:0.95f blue:1.0f alpha:1.0f];
    }

    return cell;
}

Ответы [ 4 ]

2 голосов
/ 30 декабря 2009

Ваш ответ находится (и очень хорошо описан) здесь: http://undefinedvalue.com/2009/11/02/easy-gradient-backgrounds-uitextviewcells

Мое краткое изложение решения: создайте подкласс UITableViewCell, а затем используйте свой подкласс при создании экземпляров в cellForRowAtIndexPath.

Затем вам нужно переопределить только один метод (setSelected) в вашем подклассе UITableViewCell:

  • (void) setSelected: (BOOL) выбранный анимированный: (BOOL) анимированный {

    [super setSelected: выбранный анимированный: анимированный];

    // Настройка вида для выбранного состояния для (UIView * представление в self.contentView.subviews) { view.backgroundColor = [UIColor clearColor]; } }

Причина, по-видимому, заключается в том, что встроенный класс UITableViewCell установит фон метки на белый (или выбранный цвет) при отображении на основе состояния выбора в таблице в методе setSelected. Замените свою собственную, вызовите реализацию базового класса, затем настройте фоны подпредставления для очистки, чтобы фон вашего contentView просвечивал.

1 голос
/ 05 декабря 2009

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

Что-то вроде:

UILabel* label = [[UILabel alloc] init];
label.frame = CGRectMake( 20, 10, 200, 22 );
label.backgroundColor = [UIColor clearColor];
label.opaque = NO;        
label.text = @"your text here:";
[cell addSubview:label];
[label release];

В этом примере я довольно произвольно установил рамку для метки (ну, на самом деле, это не было изменено из моего собственного реального кода). Возможно, вам нужно быть более динамичным с определением размера, и в этом случае вам, вероятно, потребуется создать подкласс ячейки и переопределить setFrame, чтобы синхронизировать кадр метки. Но жестко закодированные значения должны помочь вам.

1 голос
/ 05 декабря 2009

текст не имеет фона, а textLabel так

[[cell textLabel] setBackground:[UIColor redColor]];
0 голосов
/ 05 декабря 2009
#define LABEL_TAG 99
    // whatever your label rect size should be... change as appropriate
    UIlabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300.0, 30.0)]; 
    label.tag = LABEL_TAG;
    // set up alignment, font, autoresizemask, etc.
    label.backgroundColor = [UIColor clearColor];
    label.opaque = NO;
    [cell.contentView addSubview:label];
    [label release];

Следует обратить внимание на то, что вы не добавляете свой собственный ярлык в многократно используемую ячейку таблицы более одного раза. Установив известное свойство view.tag, вы можете получить (или обнаружить существование) представление UILabel. [cell viewWithTag:LABEL_TAG]

Всякий раз, когда вы удаляете из очереди многократно используемую ячейку, сначала получите ссылку на представление метки, а затем делайте то, что вы обычно делаете, если бы использовали textLabel UITableCell.

...