ios7 UITableViewCell selectionStyle不会再回到蓝色

时间:2013-09-13 19:45:51

标签: uitableview ios7

Xcode 5.0,iOS 7并更新现有应用。 UITableView所选行现在是灰色的,而不是蓝色。

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

我已尝试在IB和代码中设置值,但没有运气。关于我需要做些什么才能获得蓝色选择风格的想法?

4 个答案:

答案 0 :(得分:57)

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;
}

答案 1 :(得分: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有great article on how to use it at his NSHipster blog

答案 2 :(得分: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];
        }
    }
}

答案 3 :(得分: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];
}