Pour ce faire, il vous suffit de trouver le segment sélectionné, par exemple par une itération sur la segmentation du contrôle des sous-vues et le test de l' isSelected
de la propriété, puis il suffit d'appeler l' setTintColor:
méthode sur la sous-vue.
Je l'ai fait par la connexion d'une action pour chaque commande segmentée sur l'événement ValueChanged dans Interface Builder, je suis connecté à cette méthode dans la vue contrôleur de fichier qui est essentiellement msprague's réponse:
- (IBAction)segmentedControlValueChanged:(UISegmentedControl*)sender
{
for (int i=0; i<[sender.subviews count]; i++)
{
if ([[sender.subviews objectAtIndex:i] respondsToSelector:@selector(isSelected)] && [[sender.subviews objectAtIndex:i]isSelected])
{
[[sender.subviews objectAtIndex:i] setTintColor:[UIColor whiteColor]];
}
if ([[sender.subviews objectAtIndex:i] respondsToSelector:@selector(isSelected)] && ![[sender.subviews objectAtIndex:i] isSelected])
{
[[sender.subviews objectAtIndex:i] setTintColor:[UIColor blackColor]];
}
}
}
Pour s'assurer que le contrôle est affiché correctement chaque fois que l'affichage est ouvert par l'utilisateur, j'ai aussi eu à remplacer l' -(void)viewDidAppear:animated
méthode et d'appeler la méthode comme suit:
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
//Ensure the segmented controls are properly highlighted
[self segmentedControlValueChanged:segmentedControlOne];
[self segmentedControlValueChanged:segmentedControlTwo];
}
Pour certains points de bonus si vous ne souhaitez définir la segmentation de contrôle de l'utilisation d'un blanc couleur de teinte sur la sélection, puis vous aurez aussi envie de changer la couleur du texte en noir quand il est sélectionné, vous pouvez le faire comme ceci:
//Create a dictionary to hold the new text attributes
NSMutableDictionary * textAttributes = [[NSMutableDictionary alloc] init];
//Add an entry to set the text to black
[textAttributes setObject:[UIColor blackColor] forKey:UITextAttributeTextColor];
//Set the attributes on the desired control but only for the selected state
[segmentedControlOne setTitleTextAttributes:textAttributes forState:UIControlStateSelected];
Avec l'introduction de l' iOS 6 réglage de la teinte de la couleur de l'élément sélectionné pour la première fois dans le viewDidAppear coutume méthode de travail, pour contourner cela, j'ai utilisé de grand central dispatch pour changer la couleur sélectionnée après une fraction de seconde comme suit:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.05 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[self segmentedControlValueChanged:segmentedControlOne];
});