Bogue de mise en évidence de l'image UISegmentedControl dans iOS6

Actuellement, j'ai un petit contrôle segmenté avec 3 segments distincts.

Ce que je veux faire est, si sélectionné, changer l'image de ce segment spécifique à une image différente.

Jusqu'à présent, j'ai réussi à le rendre très similaire à ce que je veux, et une nouvelle image est affichée lors de la sélection, mais une petite partie de la nouvelle image est couverte par un surlignage bleu (ci-dessous), et peu importe ce que j'essaie Je ne peux pas m'en débarrasser

Pour une raison quelconque, la mise en surbrillance est une partie prioritaire de l'image.

Je voudrais savoir comment désactiver complètement toute mise en évidence / changement d'un contrôle segmenté lorsqu'il est sélectionné, ou toute autre option qui permettrait d'atteindre ma question.

Ce que j'ai essayé jusqu'ici:

  • définition de l'image de fond de UISegmentedControl
  • Image d'arrière-plan personnalisé UISegmentedControl

Mon code (juste tester une image pour un button sélectionné comme vous pouvez le voir):

-(IBAction)languageChanged:(UISegmentedControl *)sender { UISegmentedControl *segmentControl = [[UISegmentedControl alloc] init]; [segmentControl addTarget:self action:@selector(segmentedControlValueChanged:) forControlEvents:UIControlEventValueChanged]; [self.view addSubview:segmentControl]; [sender setImage:[UIImage imageNamed:@"rsz_langue-francais-on.png"] forSegmentAtIndex:sender.selectedSegmentIndex]; } 

Je ne suis pas sûr à 100% si cela fonctionnera, mais la couleur du segment est déterminée par tintColor .

Vous pouvez donc simplement définir tintColor sur [UIColor clearColor];

MODIFIER:

J'ai lu que c'est un problème avec iOS6 et au-dessus. Pour résoudre le problème, définissez la largeur de chaque section plutôt que le contrôle segmenté entier.

Voici un exemple de code (non testé) pour un UISegmentedControl d'une largeur de 180:

 float version = [[[UIDevice currentDevice] systemVersion] floatValue]; if (version >= 6.0) { [[UISegmentedControl appearance] setWidth:90 forSegmentAtIndex:0]; [[UISegmentedControl appearance] setWidth:90 forSegmentAtIndex:1]; } else{ segmentedControl.frame = CGRectMake(0, 0, 180, 30); } 

EDIT 2:

J'ai seulement été capable de changer une couleur de teinte de contrôle de segment quand le style est réglé sur 'Bar' plutôt que sur 'Plain'. J'ai vraiment hâte ces changements car la cohérence de la couleur dans mes applications est compromise.

Une solution temporaire et sale pourrait être de vérifier l'état momentané à OUI. Cela le rendrait seulement bleu pendant une seconde et vos images personnalisées le feront toujours sembler sélectionné.

En fin de count, la seule façon de corriger (peut-être d'éviter serait un meilleur mot) était de changer le style de uisegmentedcontrol de ' Plain ' à ' Bar ', ce qui supprimait l'espacement bleu entre les segments, comme Pasortingck suggéré ci-dessus. J'ai entendu dire qu'il s'agit d'un bug connu iOS6, et j'espère que c'est corrigé bientôt.