Вопрос по uiview, ios – Четкий ответ о том, как замаскировать UIView как UITableViewCell selectedBackgroundView

8

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

Я создаюUIView и установите его цвет фона на желаемыйUITableViewCell выбор цвета(instead of the standard blue or gray selection colors), Я добавляю этоUIView в мою камеруselectedBackgroundView и это работает нормально, моя ячейка меняется на желаемый цвет по выбору пользователя.

Этот метод отлично работает на равнинеUITableViews; не так хорошо сгруппированы. На сгруппированныхUITableView1-я и последняя ячейка не соответствуют границам клипа / маски, как показано на скриншотах ниже.

Я знаю, что нет способа закруглить только верхний левый и верхний правый углы.

Я хочу сделать это строго по коду, без изображений.

Question

Does anyone know of a nice little work around to change the selectedBackgroundView color of a UITableViewCell using only the UIView and not images AND to make the 1st and last cell conform to the rounded corner boundaries?

Example
<code>- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString * CellIdentifier = @"Cell";
    WCSBadgedCell   * cell = [[WCSBadgedCell alloc] initWithStyle:UITableViewCellStyleSubtitle andBadgeStyle:0 reuseIdentifier:CellIdentifier]; 
    if (cell == nil) {
        cell = [[WCSBadgedCell alloc] initWithStyle:UITableViewCellStyleDefault andBadgeStyle:0 reuseIdentifier:CellIdentifier];
    }

    UIView *bgColorView = [[UIView alloc] init];
    [bgColorView setBackgroundColor:DARKBROWN];
    [bgColorView setClipsToBounds: YES];
    [cell.layer setMasksToBounds:YES];
    [cell setSelectedBackgroundView:bgColorView];

    [cell.textLabel setText: @"Testing a Cell"];

    return cell;
}
</code>
Screenshots

enter image description here

enter image description here

enter image description here

Solution

Я принялCodaFis ответ потому что он добавил комментарий, который указал на довольно хороший(yet lengthy) решение. Мне пришлось немного обновить, но, в конце концов, теперь у меня есть выбранныйBackgroundView, который мне нужен, который закругляет углы в 1-й и последней ячейках, еще раз спасибо!

Вот русский пример того, как я этого добился.

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

Ваш Ответ

2   ответа
3

что вы используете подкласс UITableViewCell из-за сложности вашей ячейки. Вот как я это делал:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]))
    {
        self.clipsToBounds = YES;

        UIView* bgView = [[UIView alloc] init];
        bgView.backgroundColor = [UIColor colorWithWhite:0.f alpha:0.25f];
        self.selectedBackgroundView = bgView;
                //other code

    }
    return self;
}

Это создает своего рода темно-серое наложение на ячейку, а изображения не требуются!

В вашем случае точный цвет выбранной ячейки (благодаря удобному цифровому цветометру) будет

[UIColor colorWithRed:106.0f/255.0f green:51.0f/255.0f blue:6.0f/255.0f alpha:1.0f];

и белый текст будет

- (void)setSelected:(BOOL)sel animated:(BOOL)animated
{
    [super setSelected:sel animated:animated];

    if (sel)
    {
        self.textLabel.textColor = [UIColor whiteColor];

        }
    else
    {
        self.textLabel.textColor = [UIColor colorWithRed:(105.f/255.f) green:(50.f/255.f) blue:(6.f/255.f) alpha:1.f];  

    }
}
Error: User Rate Limit ExceededhereError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded WrightsCS
Error: User Rate Limit Exceeded WrightsCS
1

-(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated в моем подклассе UITableViewCell и не устанавливая стиль выделения при создании ячейки

//set no selection style in the cell
...
[self setSelectionStyle:UITableViewCellSelectionStyleNone];
...

//override setHighlighted to manually set the regular/highlighted background colors
-(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
    [super setHighlighted:highlighted animated:animated];
    if(highlighted){
        self.backgroundColor = [UIColor greenColor];
    }
    else {
        self.backgroundColor = [UIColor redColor];
    }
}

Похожие вопросы