37

Xcode 5.0、iOS 7 和更新现有应用程序。UITableView选定的行现在是灰色的,而不是蓝色的。

根据我的阅读,他们将默认设置更改selectionStyle为灰色。但是“蓝色”仍然是 IB 中的一个选项,并且UITableViewCellSelectionStyleBlue仍然存在。检查新的 HIG,看起来他们并没有删除蓝色,“设置”应用程序仍然使用蓝色单元格选择。

我尝试在 IB 和代码中设置值,但没有运气。关于我需要做些什么来恢复蓝色选择风格的任何想法?

4

4 回答 4

58

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;
}
于 2013-09-14T08:20:01.360 回答
13

我知道这已经得到了回答,但我最不想做的就是触摸我所有的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 博客上有一篇关于如何使用它的精彩文章

于 2014-01-15T15:11:18.020 回答
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];
        }
    }
}
于 2013-09-22T09:04:16.293 回答
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];
}
于 2016-11-18T05:05:28.490 回答