J'ai un uipicker, je veux changer la couleur du sélecteur. Est-il possible de changer la couleur du sélecteur? P>
5 Réponses :
Je suppose que vous avez affaire à l'iPhone SDK? Il peut y avoir d'autres cadres qui utilisent ce nom, alors peut-être que vous pouvez ajouter vos tags à inclure Uikit, Cocoa-touch ou quelque chose.
De toute façon, vous pouvez définir figureSelectionIndicator code> de l'instance UIPICKERVIEW , donc il cache le sélecteur. Ensuite, vous pouvez créer une nouvelle vue avec le style de sélection ajusté et l'ajouter à la SuperView au-dessus de l'UIPICKERView. P>
// Some sample code, but you can do this in IB if you want to
_pickerView = [[UIPickerView alloc] init];
_pickerView.showsSelectionIndicator = NO;
[_pickerView sizeToFit];
[self.view addSubview:_pickerView];
UIImage *selectorImage = [UIImage imageNamed:@"selectorImage.png"]; // You have to make it strechable, probably
UIView *customSelector = [[UIImageView alloc] initWithImage:selectorImage];
customSelector.frame = CGRectZero; // Whatever rect to match the UIImagePicker
[self.view addSubview:customSelector];
[customSelector release];
Peut-être que cela ne convient pas parfaitement à la réponse à cette question, dans iOS 7 et plus tard, vous pouvez personnaliser la couleur de cette manière:
dans les méthodes de délégation p> Ajouter Suivant p> update strong> p> code précédent fonctionne, mais donc. Voici simples sous-classes pour Uipickerview P> Swift: p> objectif-c: p> et vous Peut définir la couleur du sélecteur directement dans Storyboard P> Merci à Ross Bidish - "Avec iOS 9.2 et Xcode 7.2 publié le 12/8/2015, la hauteur de cette vue de sélection est de 0,6666666666666667". P> Mise à jour: strong> P> C'est une solution pour le problème avec iOS 10, pas bon mais fonctionne. : / p> class RDPickerView: UIPickerView
{
@IBInspectable var selectorColor: UIColor? = nil
override func didAddSubview(_ subview: UIView) {
super.didAddSubview(subview)
guard let color = selectorColor else {
return
}
if subview.bounds.height <= 1.0
{
subview.backgroundColor = color
}
}
override func didMoveToWindow() {
super.didMoveToWindow()
guard let color = selectorColor else {
return
}
for subview in subviews {
if subview.bounds.height <= 1.0
{
subview.backgroundColor = color
}
}
}
}
Cela a travaillé pour moi, mais il n'y a pas de garantie que cela ne se cassera pas à l'avenir si Apple apporte des modifications au pionnier.
Merci! C'est le seul moyen réel de changer les couleurs des indicateurs de sélection. Travaille à Swift.
Dans iOS 9.2, je devais définir SUBVIEW.SIZE.SIZE.SIZE.SIZE <= 1.0 Pour que les barres d'indicateur de sélection changent de couleur.
Sur iOS 10, cela ne fonctionne que la première fois que la vue contenant un sélecteur est affichée. Lorsque la vue est affichée à la deuxième fois, la couleur des indicateurs est de retour sur défaut.
@DMitry Klochkov, j'ai ajouté Hotfix.
L'application ne sera-t-elle pas rejetée pour accéder aux sous-visions d'UipickerView et les modifier directement?
@Fengson Aucun API privé utilisé ici, donc aucun problème avec le processus d'examen Apple.
Vous pouvez modifier simplement la couleur d'arrière-plan forte> aussi. considère cela, p> et mettez la
Juste Ajoutez un UIView EM> au-dessus de l'indicateur de sélection (il deviendra une vue de superposition), définissez-la est valeur alpha bas em> (dépend de vous, mais j'aime ma superposition de regarder transparent) , Donnez-lui une couleur d'arrière-plan em> et vous êtes prêt à partir. overlayOnPicker.backgroundColor = UIColor.whiteColor()
overlayOnPicker.alpha = 0.2
myDatePicker.addSubview(overlayOnPicker)
// You have to add the overlayOnPicker view as a subview to the Date Picker.
// myDatePicker is the UIDatePicker that I declared earlier in my code
Voici une amélioration de la réponse de Vsilux, sous la forme d'une catégorie simple à Uipickview, sans la sous-classe Uipickview.
(réponse à jour à compter du 2 novembre 2018) em> P> SWIFT 4, XCode 10: P> @IBInspectable var selectorColor: UIColor? {
get {
return objc_getAssociatedObject(self, &selectorColorAssociationKey) as? UIColor
}
set(newValue) {
objc_setAssociatedObject(self, &selectorColorAssociationKey, newValue,
objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
}
}
open override func didAddSubview(_ subview: UIView) {
super.didAddSubview(subview)
if let color = selectorColor {
if subview.bounds.height < 1.0 {
subview.backgroundColor = color
}
}
}
Vous pouvez également sousclure uipickerview et ajouter à la suite de personnalisations:
Au cas où quelqu'un la recherche, j'ai ajouté une réponse pour le sélecteur à Swiftui ici: Stackoverflow.com/a/69944302/9497800 A> SWIFTUI utilise l'Uipickerview dans les coulisses et accédant à ses sous-espages, cette ligne a bien fonctionné pour moi:
sélecteur.subviews [1] .backgroundColor = uicolor.red code>