iphone ios7 segmenté UISegmentedControl modifier uniquement la couleur de la bordure
Été en regardant autour et essayer de changer juste la couleur de la bordure (avec une autre couleur de texte) avec pas de chance. Pouvez modifier la teinte, mais les changements à la fois le texte et la bordure.
Vous pouvez utiliser UIAppearance proxy pour définir le titre des attributs de texte, mais de préserver la nuance de couleur pour les bordures.
Quelque chose comme:
Donc, bien fait. Rapide, bonne réponse. Merci les gens, en Plus de cette réponse. Je dirais que ma réponse est plus la bonne solution. N'hésitez pas à jeter un coup d'oeil 🙂 + 1 pour le code, il m'a sauvé beaucoup de maux de tête Ne fonctionne que si vous utilisez du texte dans votre commande segmentée. Lorsque les éléments sont des images, ils deviennent teinté de la même couleur que les frontières et cette approche ne serait pas aider. C'est le droit. Mais il est assez facile de teinte des images manuellement, j'ai mis à jour ma réponse.
Maintenant tintColor aura d'incidence que sur la frontière à ne pas sur les icônes.
if offre une compatibilité avec les anciennes versions iOS.
Je dois dire que cette imageWithRenderingMode: est l'un des plus grands API WTF que j'ai jamais vu.
Question d'origine n'est pas sur la teinture des images. "uniquement changer la couleur de la bordure" par tintColor. Mais ceci a un impact sur les icônes par défaut, ce qui empêche ce problème. J'ai supposé que c'est évident, apparemment je me suis trompé j'ai donc fait une mise à jour. Accepté de répondre à résoudre le même problème à l'aide de catégorie comme une solution de contournement. Mon approche est beaucoup mieux. Ups maintenant, j'ai remarqué que tu menaces les icônes différemment alors je l'ai attendu. Encore de l'OMI, ma réponse est tout à fait utile.
Ce qui a fonctionné pour moi: est-ce que d'autres réponses suggèrent, changer la nuance de couleur de la segmentedControl à clearColor. Et manuellement teinte les images de votre application teinte de couleur.
N'oubliez pas d'utiliser le imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal sur l'image teintée
Ma solution donne à la frontière de la segmentation de contrôle d'une autre couleur, et de garder le texte que la teinte de la couleur.
Afin de ne modifier la couleur de la bordure de votre commande segmentée, dans l'autre sectorielle de contrôle sur le dessus de votre ancien. Puis désactiver l'interaction de l'utilisateur pour cette nouvelle, et j'ai mis l'image pour le segment sélectionné néant.
UISegmentedControl*segCtrl =[[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Segm 1",@"Segm 2",@"Segm 3",@"Segm 4",nil]];//The UISegmentedController which you want to change the border color for[segCtrl setFrame:CGRectMake(5,5,[UIScreen mainScreen].bounds.size.width -10,30)];[segCtrl setSelectedSegmentIndex:0];[segCtrl setTintColor:[UIColor redColor]];UISegmentedControl*bcg =[[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@" ",@" ",@" ",@" ",nil]];//The UISegmentedController you put on top of the other one[bcg setFrame:CGRectMake(5,5,[UIScreen mainScreen].bounds.size.width -10,30)];[bcg setSelectedSegmentIndex:0];[bcg setImage:nil forSegmentAtIndex:0];//Removing highlight color[bcg setTintColor:[UIColor greenColor]];[bcg setUserInteractionEnabled:NO];[[self view] addSubview:segCtrl];[[self view] addSubview:bcg];
Bien sûr, vous devez prendre soin de l'encadrement et de couleurs pour s'adapter à votre application. Autre que cela, ce code doit être bon d'aller.
a) c'est faux, voir la réponse à ce qui est plus clair et simple b) vous prenez sauvage hypothèse sur la façon dont le contrôle ressemble avec fixe les calculs. Un changement mineur pour iOS et vous devez mettre à jour votre code. c) vous n'avez pas de superposition de deux contrôles, sauf si absolument nécessaire.
Vous pouvez utiliser UIAppearance proxy pour définir le titre des attributs de texte, mais de préserver la nuance de couleur pour les bordures.
Quelque chose comme:
Edit:
À la teinte des images, vous pouvez utiliser quelque chose comme cela dans la catégorie sur comme uimage:
Je dirais que ma réponse est plus la bonne solution. N'hésitez pas à jeter un coup d'oeil 🙂
+ 1 pour le code, il m'a sauvé beaucoup de maux de tête
Ne fonctionne que si vous utilisez du texte dans votre commande segmentée. Lorsque les éléments sont des images, ils deviennent teinté de la même couleur que les frontières et cette approche ne serait pas aider.
C'est le droit. Mais il est assez facile de teinte des images manuellement, j'ai mis à jour ma réponse.
OriginalL'auteur kkodev
Je préfère la solution (pas de catégorie), lorsque vous définissez des images pour
UISegmentedControl
que vous devez modifier des images comme ça:Maintenant
tintColor
aura d'incidence que sur la frontière à ne pas sur les icônes.if
offre une compatibilité avec les anciennes versions iOS.Je dois dire que cette
imageWithRenderingMode:
est l'un des plus grands API WTF que j'ai jamais vu."uniquement changer la couleur de la bordure" par
tintColor
. Mais ceci a un impact sur les icônes par défaut, ce qui empêche ce problème. J'ai supposé que c'est évident, apparemment je me suis trompé j'ai donc fait une mise à jour. Accepté de répondre à résoudre le même problème à l'aide de catégorie comme une solution de contournement. Mon approche est beaucoup mieux.Ups maintenant, j'ai remarqué que tu menaces les icônes différemment alors je l'ai attendu. Encore de l'OMI, ma réponse est tout à fait utile.
OriginalL'auteur Marek R
Ce qui a fonctionné pour moi: est-ce que d'autres réponses suggèrent, changer la nuance de couleur de la segmentedControl à clearColor. Et manuellement teinte les images de votre application teinte de couleur.
N'oubliez pas d'utiliser le
imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal
sur l'image teintéeOriginalL'auteur ugiflezet
Vous pouvez changer d'abord la nuance de couleur et après la textedetitre.
OriginalL'auteur Victor Rius
Ma solution donne à la frontière de la segmentation de contrôle d'une autre couleur, et de garder le texte que la teinte de la couleur.
Afin de ne modifier la couleur de la bordure de votre commande segmentée, dans l'autre sectorielle de contrôle sur le dessus de votre ancien. Puis désactiver l'interaction de l'utilisateur pour cette nouvelle, et j'ai mis l'image pour le segment sélectionné néant.
Bien sûr, vous devez prendre soin de l'encadrement et de couleurs pour s'adapter à votre application. Autre que cela, ce code doit être bon d'aller.
OriginalL'auteur OscarWyck
OriginalL'auteur g212gs