Dazu müssen Sie lediglich das ausgewählte Segment finden, indem Sie beispielsweise die Unteransichten des segmentierten Steuerelements durchlaufen und die isSelected
Eigenschaft testen. Rufen Sie dann einfach das aufsetTintColor:
Methode für diese Unteransicht aufrufen.
Dazu habe ich eine Aktion mit jedem segmentierten Steuerelement des ValueChanged-Ereignisses in Interface Builder verbunden. Ich habe sie mit dieser Methode in der View-Controller-Datei verbunden, die im Wesentlichen die Antwort von msprague ist :
- (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]];
}
}
}
Um sicherzustellen, dass das Steuerelement bei jedem Öffnen der Ansicht durch den Benutzer korrekt angezeigt wird, musste ich die -(void)viewDidAppear:animated
Methode auch überschreiben und die Methode wie folgt aufrufen:
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self segmentedControlValueChanged:segmentedControlOne];
[self segmentedControlValueChanged:segmentedControlTwo];
}
Für einige Bonuspunkte, wenn Sie das segmentierte Steuerelement so einstellen möchten, dass bei der Auswahl eine weiße Tönungsfarbe verwendet wird, möchten Sie auch die Farbe des Texts bei der Auswahl in Schwarz ändern. Gehen Sie dazu folgendermaßen vor:
NSMutableDictionary * textAttributes = [[NSMutableDictionary alloc] init];
[textAttributes setObject:[UIColor blackColor] forKey:UITextAttributeTextColor];
[segmentedControlOne setTitleTextAttributes:textAttributes forState:UIControlStateSelected];
Mit der Einführung von iOS 6 funktioniert das erstmalige Einstellen der Farbtonfarbe des ausgewählten Elements in der viewDidAppear-Methode nicht. Um dies zu umgehen, habe ich die ausgewählte Farbe mithilfe von Grand Central Dispatch nach einem Bruchteil einer Sekunde wie folgt geändert:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.05 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[self segmentedControlValueChanged:segmentedControlOne];
});