2013-09-13 3 views
36

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

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

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

+0

Я не могу проверить это прямо сейчас, но в методе cellForRowAtIndexPath, он не работает, чтобы использовать оператор, 'cell.selectionStyle = UITableViewCellSelectionStyleBlue ; '? – erdekhayser

+0

Просто протестировал его - он не работает. Я попытаюсь понять это и вернуться к вам, если смогу это исправить. – erdekhayser

ответ

57

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

- (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; 
} 
+0

Я думал о том, чтобы попробовать что-то вроде этого. Единственная проблема заключается в том, что 'blueColor' является самым уродливым возможным оттенком синего для этого. Если кто-то хочет использовать это в приложении, тогда для использования будет лучше использовать RGB-комбо для лучшего цвета. – erdekhayser

+0

Итак, что я слышу, синий по умолчанию либо больше не существует, либо работает неправильно. Это тоже был мой вывод, но, похоже, странно странно, что они не вынесут его из пользовательского интерфейса или не осудят его, если у него не будет будущего. – DBD

+0

Несмотря на то, что этот ответ не слишком доволен, этот тип подхода кажется единственным, что в настоящее время работает (надеюсь, это скоро изменится). Поэтому я отмечаю как принятый ответ. – DBD

7

Вероятно, это может помочь вам. У меня есть пользовательские ячейки и сделать его выбирает с необходимым цветом я перезаписью 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]; 
     } 
    } 
} 
+0

Работал огромное спасибо! – RyanG

13

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

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

Затем, чтобы сделать белый текст привет свет:

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

Это сделало глобальное изменение в моем приложении. Внешний вид был введен в iOS5, а Mattt имеет great article on how to use it at his NSHipster blog.

+0

Я обязательно буду учитывать это в следующий раз, когда мне нужно это сделать. – DBD

+0

Наконец-то решение, которое работает :) – bugfixr

0

Я знаю, что я очень опаздываю на вечеринку, но я также предлагаю свою работу 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]; 
} 
Смежные вопросы