7
votes

Comment changer la couleur du sélecteur Uipickerview

J'ai un uipicker, je veux changer la couleur du sélecteur. Est-il possible de changer la couleur du sélecteur?


5 Réponses :


4
votes

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];


0 commentaires

23
votes

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> xxx pré>

Ajouter Suivant p> xxx pré>

update strong> p>

code précédent fonctionne, mais donc. Voici simples sous-classes pour Uipickerview P>

Swift: p> xxx pré>

objectif-c: p> xxx pré>

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
            }
        }
    }
}


7 commentaires

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.



0
votes

Vous pouvez modifier simplement la couleur d'arrière-plan forte> aussi.
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.

considère cela, p> xxx pré>

et mettez la x Valeur = 1 fort> (N'oubliez pas que c'est un cadre, il sera donc placé selon le système de coordonnées de SuperView) P>

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


0 commentaires

11
votes

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
        }
    }
}


0 commentaires

0
votes

Vous pouvez également sousclure uipickerview et ajouter à la suite de personnalisations: xxx


0 commentaires