web-dev-qa-db-ja.com

ios7 UITableViewCell selectionStyleが青に戻らない

Xcode 5.0、iOS 7、および既存のアプリの更新。 UITableView選択した行が青ではなく灰色になりました。

私が読んだものから、彼らはデフォルトのselectionStyleを灰色に変更しました。しかし、「青」はIBのオプションであり、UITableViewCellSelectionStyleBlueはまだ存在しています。新しいHIGをチェックすると、青と「設定」アプリが青のセル選択をまだ使用していないようです。

IBとコードで値を設定しようとしましたが、うまくいきませんでした。青の選択スタイルを取り戻すために何をする必要があるかについてのアイデアはありますか?

37
DBD

IOS7にはselectionStyleが1つしかありません。変更するには、次のように手動で変更する必要があります。

- (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;
}
58
Tarek Hallak

私はこれがすでに回答されていることを知っていますが、私がやりたかった最後のことは、すべての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で導入され、マットは 彼のNSHipsterブログでの使用方法に関する素晴らしい記事 を持っています。

13
Walter

おそらくそれはあなたを助けることができるでしょう。カスタムセルがあり、必要な色で選択するには、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];
        }
    }
}
7
Max Tymchii

私はパーティーに本当に遅れていることはわかっていますが、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];
}
0
Thunk