Personnalisation des couleurs d'un UISegmentedControl
Quelqu'un connais un moyen de personnaliser l'apparence de la chaîne en fonction de UISegmentedControl? Je suis en train de mettre la couleur de fond de la cellule et la couleur du texte différemment selon la sélection de l'état de l'élément.
Sinon, connaissez-vous un moyen de créer UIImages à la volée dans lesquels inclure des chaînes personnalisées? (par exemple, créer des UUImage avec un fond blanc, superposition de texte, ajouter à la commande segmentée).
Je sais que vous ne pouvez avoir que des chaînes ou des images dans la segmentation de contrôle...
Vous devez vous connecter pour publier un commentaire.
UISegmentedControl a une nuance de couleur à la propriété-cette fonction vous permet de changer de quelle couleur le contrôle de l'est, mais pas le général "style" (les arrondis, bords biseautés forme):
Pour la création d'UIImages à la volée, vous pouvez créer un CGContext, faire ce dessin, vous devez dans ce contexte (y compris les chaînes), puis obtenir une UIImage hors du contexte de l'CGImage:
Veuillez noter que si vous utiliser un code comme
UIView.appearance().tintColor = .myColor
(ou l'équivalent. en ObjC), l'effet le plus probable n'aura pas lieu.UIView.appearance().tintColor = .myColor
– je ne pouvais pas remplacer manuellement lesUISegmentedControl
s'nuance de couleur (ni storyboard, ni code) de sorteUISegmentedControl.tintColor
ai hérité deUIView
s'nuance de couleur. J'ai donc dû changer de ligne.appearance()
de quelques années.La plupart des réponses ici ne réponds pas à la question de savoir comment définir un bouton de couleur en fonction de l'état sélectionné ce qui implique une autre couleur est souhaitée pour les non sélectionnés de l'état. J'ai eu du mal avec cela fait déjà quelques temps et je voulais partager ma solution à utiliser pour les autres.
Mon exemple utilise un
UISegmentedControl
avec trois segments. Les autres couleurs pour tous les trois doivent être les mêmes pour lui donner un aspect uniforme. L'état sélectionné pour le premier et le dernier segment ont des couleurs uniques.Le problème est que la segmentation de contrôle n'est pas assuré d'être dans le même ordre afin que les couleurs seront mélangées à mesure que vous sélectionnez d'avant en arrière. Dan a posté une solution qui utilise des balises, mais malheureusement il n'est plus garanti pour iOS 6 et plus.
La plupart de ce code est issu du ce post. Je l'ai changé légèrement d'avoir unique des couleurs sélectionnées.
Ce qui est du tri, mais de prendre note de ces 2 lignes importantes pour le réglage de la couleur sélectionnée:
J'ai placé le code dans son propre méthode parce que je suis le chargement de ces sectorielle des contrôles en vue de la table et ont besoin de l'exécuter au chargement (états existants de stockage) et lorsqu'un utilisateur modifie une sélection. Maintenant, j'ai juste besoin de faire appel
[Self updateSegmentColors];
lorsque quelque chose change.Tout ce que vous avez à faire est de:
La meilleure façon que j'ai trouvé de faire quelque chose comme ceci est le réglage des attributs différents pour les différents UIControlStates sur la segmentation de contrôle.
Voici un exemple de code qui fonctionne avec iOS9, mais c'est un hack, et peut ne pas fonctionner dans les versions ultérieures:
Couleur de police swift 3 et swift 4 si vous souhaitez modifier
Pour les non sélectionnés élément
Pour l'élément Sélectionné
J'ai été capable de le faire via l'Interface Builder dans XCode 6. Ci-joint la teinte de la propriété:
Je voulais accomplir quelque chose de similaire - définir la couleur de fond du segment sélectionné une couleur alors que le contour du reste des segments ont une couleur différente.
Emprunt fortement de Portland Runner répondre, l'idée est de créer des sous-classes UISegmentedControl, et remplacer les 2 méthodes à la fois le style de l'état initial ainsi que la capture de l'événement de changement de style il automatiquement que l'utilisateur sélectionne les différents segments.