Xcode 5.0、iOS 7 和更新现有应用程序。UITableView
选定的行现在是灰色的,而不是蓝色的。
根据我的阅读,他们将默认设置更改selectionStyle
为灰色。但是“蓝色”仍然是 IB 中的一个选项,并且UITableViewCellSelectionStyleBlue
仍然存在。检查新的 HIG,看起来他们并没有删除蓝色,“设置”应用程序仍然使用蓝色单元格选择。
我尝试在 IB 和代码中设置值,但没有运气。关于我需要做些什么来恢复蓝色选择风格的任何想法?
Xcode 5.0、iOS 7 和更新现有应用程序。UITableView
选定的行现在是灰色的,而不是蓝色的。
根据我的阅读,他们将默认设置更改selectionStyle
为灰色。但是“蓝色”仍然是 IB 中的一个选项,并且UITableViewCellSelectionStyleBlue
仍然存在。检查新的 HIG,看起来他们并没有删除蓝色,“设置”应用程序仍然使用蓝色单元格选择。
我尝试在 IB 和代码中设置值,但没有运气。关于我需要做些什么来恢复蓝色选择风格的任何想法?
iOS7 中只有一个 selectionStyle,要更改,您需要手动执行此操作,如下所示:
- (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;
}
我知道这已经得到了回答,但我最不想做的就是触摸我所有的cellForRowAtIndexPath
方法。所以,我在我的 App Delegate 中使用了外观代理。我使用上面@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在他的 NSHipster 博客上有一篇关于如何使用它的精彩文章。
也许它可以帮助你。我有我的自定义单元格并使用所需的颜色选择它我已经覆盖了 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];
}
}
}
我知道我真的迟到了,但我也会提供我的 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];
}