web-dev-qa-db-fra.com

ios7 UITableViewCell selectionStyle ne redeviendra pas bleu

Xcode 5.0, iOS 7 et mise à jour d'une application existante. UITableView la ligne sélectionnée est maintenant grise et non bleue.

D'après ce que j'ai lu, ils ont changé la valeur par défaut selectionStyle en gris. Mais "Bleu" est toujours une option dans IB et UITableViewCellSelectionStyleBlue existe toujours. En vérifiant le nouveau HIG, il ne semble pas qu'ils aient supprimé le bleu et l'application "Paramètres" en utilisant la sélection de cellule bleue.

J'ai essayé de définir la valeur dans IB et dans le code, mais pas de chance. Des idées sur ce que je dois faire pour retrouver le style de sélection bleu?

36
DBD

Il n'y a qu'un seul selectionStyle dans iOS7, pour changer, vous devez le faire manuellement comme ci-dessous:

- (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;
}
57
null

Je sais que cela a déjà été répondu, mais la dernière chose que je voulais faire était de toucher toutes mes méthodes cellForRowAtIndexPath. Donc, j'ai utilisé un proxy d'apparence dans mon délégué d'application. J'ai pris le code de @ null ci-dessus pour définir la vue d'arrière-plan sélectionnée. Dans la méthode applicationDidFinishLaunching:withOptions:, j'ai placé ce code.

UIView *bgColorView = [[UIView alloc] init];
//the rest of null's code to make the view
[[UITableViewCell appearance] setSelectedBackgroundView:bgColorView];

Ensuite, pour rendre le texte blanc hi light:

[[UILabel appearanceWhenContainedIn:[UITableViewCell class], nil] setHighlightedTextColor:[UIColor whiteColor]];

Cela a entraîné un changement global dans mon application. Le proxy d'apparence a été introduit dans iOS5 et Mattt a un excellent article sur son utilisation sur son blog NSHipster .

13
Walter

Cela pourrait probablement vous aider. J'ai ma cellule personnalisée et pour la sélectionner avec la couleur souhaitée, j'ai écrasé setHighlighted et setSelected maintenant, ça ressemble à ça 

#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

Je sais que je suis vraiment en retard pour la fête, mais je proposerai également mon travail IOS10 Ne touchez aucun de vos autres codes, mais ajoutez:

-(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