Personnaliser UISegmentedControl, ajouter le fond de l'image et du segment sélectionné la couleur de teinte
Dublicate de cette, mais sa ne fonctionne pas pour moi.
J'ai créé UISegmentedControl à l'aide de UICatalog et d'essayer de changer le segment sélectionné la couleur. J'ai utilisé cette à changer de couleur. L'image d'arrière-plan fonctionne bien mais sa ne change pas le segment sélectionné la couleur. Quelles modifications dois-je faire? Ou de toute autre approche de même? Mon code ci-dessous.
NSArray *segmentTextContent = @[@"First",@"Second",@"Third"];
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:segmentTextContent];
segmentedControl.frame = CGRectMake(20, 50, 280, 30);
[segmentedControl addTarget:self
action:@selector(segmentAction:)
forControlEvents:UIControlEventValueChanged];
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
segmentedControl.selectedSegmentIndex = 1;
segmentedControl.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
[segmentedControl setBackgroundImage:[UIImage imageNamed:@"navigationBar"]
forState:UIControlStateNormal
barMetrics:UIBarMetricsDefault];
[segmentedControl setDividerImage:[UIImage imageNamed:@"divider"]
forLeftSegmentState:UIControlStateNormal
rightSegmentState:UIControlStateNormal
barMetrics:UIBarMetricsDefault];
//we want attributed strings for this segmented control
NSDictionary *textAttributes = @{ UITextAttributeTextColor:[UIColor whiteColor],
UITextAttributeFont:[UIFont fontWithName:@"HelveticaNeue-Bold" size:13] };
[segmentedControl setTitleTextAttributes:textAttributes forState:UIControlStateNormal];
textAttributes = @{ UITextAttributeTextColor:[UIColor whiteColor],
UITextAttributeFont:[UIFont fontWithName:@"HelveticaNeue-Bold" size:13] };
[segmentedControl setTitleTextAttributes:textAttributes forState:UIControlStateHighlighted];
[self.view addSubview:segmentedControl];
- (void)segmentAction:(UISegmentedControl *)sender
{
for (int i=0; i<[sender.subviews count]; i++) {
if ([[sender.subviews objectAtIndex:i]isSelected]) {
UIColor *tintcolor = [UIColor greenColor];
[[sender.subviews objectAtIndex:i] setTintColor:tintcolor];
} else {
[[sender.subviews objectAtIndex:i] setTintColor:nil];
}
}
}
OriginalL'auteur Ameet Dhas | 2013-08-21
Vous devez vous connecter pour publier un commentaire.
Utilisation
setBackgroundImage:forState:barMetrics:
avecUIControlStateSelected
en tant qu'etat.OriginalL'auteur nevan king
Dans iOS 7 avec le nouveau comportement de la nuance de couleur, essayez plutôt la couleur de l'arrière-plan. Cela va changer la couleur du texte de la segmentedControl lorsqu'il est sélectionné.
Ajoutez cette ligne avant d'ajouter le segmentedControl à la vue:
De sorte que vous n'avez pas besoin de plus:
Gardez à l'esprit que la couleur de fond de la partie non sélectionnée segmentedControl va changer aussi. Mais si vous avez des images personnalisées, vous ne le verrez pas.
Espère que ça aide.
OriginalL'auteur André Rodrigues
Pour UISegmentedControl vous pouvez utiliser ce code
Pour l'image d'arrière-plan
OriginalL'auteur Peggy Walton