IOS7 UITableViewCell selectionStyle не вернется к синему
Xcode 5.0, iOS 7 и обновление существующего приложения. UITableView
выбранная строка теперь серая, а не синяя.
Из того, что я прочитал, они изменили значение по умолчанию selectionStyle
на серый. Но "синий" по-прежнему является вариантом в IB, а UITableViewCellSelectionStyleBlue
все еще существует. Проверьте новый HIG, похоже, что они удалили синий цвет, а приложение "Настройки" все еще использовало выбор синих ячеек.
Я попытался установить значение в IB и в коде, но не повезло. Любые идеи о том, что мне нужно сделать, чтобы вернуть синий стиль выделения?
Ответы
Ответ 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];
}