Как получить прозрачный вид аксессуара в UITableViewCell? (со скриншотом) - PullRequest
8 голосов
/ 01 октября 2009

Я использую пользовательский UITableViewCell из кончика. Дополнительный вид является индикатором раскрытия информации. Проблема в том, что цвет фона UITableViewCell за дополнительным представлением не отображается (см. Изображение / источник ниже). Есть какие-нибудь подсказки? Кроме того, вот некоторые вещи, которые я пытался, но НЕ работал:

Вещи, которые НЕ работали:
- Установка backgroundColor для вспомогательного вида на clearColor
- Установка для contentView.opaque ячейки значения FALSE
- Установка для contentView.opaque представления таблицы значения FALSE
- Установка нестандартного вида аксессуаров для ячейки


альтернативный текст http://www.chicknchoke.com/so/IMG_8028.png

    -(void)showTablePrep
    {
        myTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 480, 320, 416) style:UITableViewStylePlain];
        myTableView.dataSource = self;
        myTableView.delegate = self;
        myTableView.delaysContentTouches = FALSE;
        myTableView.opaque = FALSE;
        myTableView.rowHeight = 60;

        [UIView beginAnimations:@"SlideUp" context:nil];
        [UIView setAnimationDuration:0.3f];

        [myTableView setCenter:CGPointMake(myTableView.center.x, myTableView.center.y-436)];
        [self.view addSubview:myTableView];
        [self.view bringSubviewToFront:myTableView];

        [UIView commitAnimations];


    }




- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    FriendsCell* cell = [tableView dequeueReusableCellWithIdentifier:@"CustomCellID"];

    if (cell == nil){

        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"FriendsCellView" owner:self options:nil];

        cell = (FriendsCell*)[nib objectAtIndex:0];

        if(indexPath.row % 2 == 0){

        cell.contentView.backgroundColor = [UIColor grayColor];


        }else{

        cell.contentView.backgroundColor = [UIColor lightGrayColor];


        }
        cell.accessoryView.backgroundColor = [UIColor clearColor];
        cell.contentView.opaque = FALSE;
        cell.selectionStyle = UITableViewCellSelectionStyleNone;


    if(f

riendsCounter > indexPath.row){


            cell.titleLabel.text = @"Label";
            cell.descLabel.text = @"Description goes here";

        }else{

            cell.titleLabel.text = @"";
            cell.descLabel.text = @"";
            cell.accessoryType = UITableViewCellAccessoryNone;

        }

        }

        return cell;    
    }

Ответы [ 3 ]

11 голосов
/ 01 октября 2009

Вы неправильно рисуете цвет фона для своей ячейки. UITableViewCell будет расположен так, чтобы contentView и accessoryView сидели рядом. (Это сделано для того, чтобы contentView мог обрезать свой контент, чтобы он не перекрывался с дополнительным видом). Проблема не в том, что вспомогательный вид непрозрачен, а в том, что серый фон просто не рисуется за дополнительным видом.

Правильный способ настроить фон, нарисованный за UITableViewCell, - это настроить backgroundView. Я не пробовал этого, но так как вы только меняете цвет, вы можете просто установить backgroundColor цвет на backgroundView на желаемый цвет.

1 голос
/ 02 октября 2009

Я нашел ответ, посмотрев на подвиды моей пользовательской ячейки табличного представления.

Похоже, что на дополнительном виде над кнопкой сидит кнопка. Найдя эту кнопку в подпредставлениях и изменив ее цвет, я смог обновить цвет фона за дополнительной кнопкой.

<UIButton: 0x3b4d690; frame = (277 0; 43 75); opaque = NO; layer = <CALayer: 0x3b3e0b0>>

for (UIView *aSubView in self.subviews) {
    if ([aSubView isMemberOfClass:[UIButton class]]) {
        aSubView.backgroundColor = [UIColor greenColor];
    }
}

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

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 

метод моего класса ячеек пользовательского представления таблицы. Я успешно использовал это в своем приложении для отображения другого цвета подсветки, когда пользователь выбирает ячейку. Это должно указать вам правильное направление.

0 голосов
/ 11 июня 2014

Я решаю эту проблему на iOS7, но добавляю

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

в

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

и вы изменяете свой фон и другие bakcgrounds здесь:

- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    return YES;
}

- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    // Add your Colour.
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    [cell setBackgroundColor:[UIColor colorWithHexColor:HIGHLIGHT_COLOR]];
}

- (void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    // Reset Colour.
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    [cell setBackgroundColor:[UIColor colorWithHexColor:UNHIGHLIGHT_COLOR]];   
}
...