Подтвердить что ты не робот

IOS7 UITableViewCell selectionStyle не вернется к синему

Xcode 5.0, iOS 7 и обновление существующего приложения. UITableView выбранная строка теперь серая, а не синяя.

Из того, что я прочитал, они изменили значение по умолчанию selectionStyle на серый. Но "синий" по-прежнему является вариантом в IB, а UITableViewCellSelectionStyleBlue все еще существует. Проверьте новый HIG, похоже, что они удалили синий цвет, а приложение "Настройки" все еще использовало выбор синих ячеек.

Я попытался установить значение в IB и в коде, но не повезло. Любые идеи о том, что мне нужно сделать, чтобы вернуть синий стиль выделения?

4b9b3361

Ответ 1

В iOS7 есть только один элемент выбораStyle, для изменения вам нужно сделать это вручную, как показано ниже:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{ 
    ....
    UIView *bgColorView = [[UIView alloc] init];
    bgColorView.backgroundColor = [UIColor colorWithRed:(76.0/255.0) green:(161.0/255.0) blue:(255.0/255.0) alpha:1.0]; // perfect color suggested by @mohamadHafez
    bgColorView.layer.masksToBounds = YES;
    cell.selectedBackgroundView = bgColorView;
    ....
    return cell;
}

Ответ 2

Я знаю, что это уже ответили, но последнее, что я хотел сделать, это коснуться всех моих методов cellForRowAtIndexPath. Итак, я использовал прокси-сервер внешнего вида в своем делете приложения. Я взял код @null выше, чтобы установить выбранный фоновый просмотр, а в методе applicationDidFinishLaunching:withOptions: я разместил этот код.

UIView *bgColorView = [[UIView alloc] init];
//the rest of null code to make the view
[[UITableViewCell appearance] setSelectedBackgroundView:bgColorView];

Затем, чтобы белый текст был светлым:

[[UILabel appearanceWhenContainedIn:[UITableViewCell class], nil] setHighlightedTextColor:[UIColor whiteColor]];

Это привело к глобальным изменениям в моем приложении. Прокси-сервер внешнего вида был введен в iOS5, а у Mattt есть отличная статья о том, как использовать его в своем блоге NSHipster.

Ответ 3

Возможно, это может вам помочь. У меня есть пользовательская ячейка и ее выделение с использованием необходимого цвета. Я перезаписываю setHighlighted и setSelected теперь выглядит так:

#define IOS_7 (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1 ? YES : NO)


    - (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];
    [self changeSelectionColorForSelectedORHiglightedState:selected];
    // Configure the view for the selected state
}

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
{
    [super setHighlighted:highlighted animated:animated];
    [self changeSelectionColorForSelectedORHiglightedState:highlighted];
}

- (void)changeSelectionColorForSelectedORHiglightedState:(BOOL)state
{
    if (IOS_7) {
        if (state) {
            self.contentView.backgroundColor = [UIColor blueColor];
        }
    }
}

Ответ 4

Я знаю, что я очень опаздываю на вечеринку, но я также предлагаю свою работу IOS10. Не трогайте какой-либо другой код, но добавьте:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.backgroundColor = [UIColor blueColor];
    cell.textLabel.textColor = [UIColor whiteColor];

     ... whatever else you do ...
}


-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(nonnull NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.backgroundColor = [UIColor whiteColor];
    cell.textLabel.textColor = [UIColor blackColor];
}