Frage

Ich habe einen Uipicker, ich möchte die Farbe des Selektors ändern. Ist es möglich, die Farbe des Selektors zu ändern?

War es hilfreich?

Lösung

Ich nehme an, Sie haben es mit dem iPhone SDK zu tun? Möglicherweise gibt es einige andere Frameworks, die diesen Namen verwenden. Vielleicht können Sie Ihre Tags hinzufügen, um UIKIT, Kakao-Touch oder so einzuschließen.

Wie auch immer, Sie können setzen showsSelectionIndicator der Uipickerview -Instanz zu Nein, so dass es den Selektor verbirgt. Anschließend können Sie eine neue Ansicht mit dem angepassten Auswahlstil erstellen und der Übersicht über dem Uipickerview hinzufügen.

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

Das Hacken des UI -Elements selbst wird viel mehr Arbeit benötigen, und dies muss auch funktionieren.

Andere Tipps

Vielleicht passt es nicht vollständig für die Antwort auf diese Frage, in iOS 7 und später können Sie Farbe auf diese Weise anpassen:

In den Delegiertenmethoden

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component

Fügen Sie die folgende hinzu

[[pickerView.subviews objectAtIndex:1] setBackgroundColor:NEEDED_COLOR];
[[pickerView.subviews objectAtIndex:2] setBackgroundColor:NEEDED_COLOR];

AKTUALISIEREN

Vorheriger Code funktioniert, aber so lala. Hier einfache Unterklassen für uipickerview

Schnell:

class RDPickerView: UIPickerView
{
    @IBInspectable var selectorColor: UIColor? = nil

    override func didAddSubview(subview: UIView) {
        super.didAddSubview(subview)
        if let color = selectorColor
        {
            if subview.bounds.height <= 1.0
            {
                subview.backgroundColor = color
            }
        }

    }
}

Ziel c:

@interface RDPickerView : UIPickerView

@property (strong, nonatomic) IBInspectable UIColor *selectorColor;

@end

@implementation RDPickerView

- (void)didAddSubview:(UIView *)subview
{
    [subview didAddSubview:subview];
    if (self.selectorColor)
    {
        if (subview.bounds.size.height <= 1.0)
        {
            subview.backgroundColor = self.selectorColor;
        }
    }
}

@end

und Sie können die Selektorfarbe direkt in Storyboard festlegen

Dank Ross Barbish - "Mit iOS 9.2 und Xcode 7.2, der 08.12.2015 veröffentlicht wird, beträgt die Höhe dieser Auswahlansicht 0,666666666666667".

AKTUALISIEREN:

Es ist Fix für das Problem mit iOS 10, nicht gut, aber funktioniert. :/

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

Danke Dmitry Klochkov, ich werde versuchen, eine bessere Lösung zu finden.

Hier finden Sie eine Verbesserung der Antwort von VSILUX in Form einer einfachen Kategorie zu Uipickerview, ohne dass Uipickerview unter Klassen erforderlich ist.

(Aktuelle Antwort zum 2. November 2018)

Swift 4, Xcode 10:

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

Sie können nur die ändern Hintergrundfarbe des Auswahlindikators auch.
Gerade Fügen Sie eine UIView hinzu Über dem Auswahlindikator (es wird zu Ihrer Overlay -Ansicht) setzen Alpha -Wert niedrig(Hängt von dir ab, aber ich mag es, wenn mein Overlay transparent aussieht), Geben Sie ihm eine Hintergrundfarbe Und du bist gut zu gehen.

Bedenken Sie,

var overlayOnPicker:UIView = UIView(frame: CGRectMake(1, 68, mypicker.frame.width, 26))
// Adds a layer on the selection indicator

Und setze die CGRECT'S X -Wert = 1(Denken Sie daran, es ist ein Rahmen, also wird es gemäß dem Koordinatensystem des Überszens platziert.)

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top