Frage

Ich möchte die Grenzfarbe eines Uipickerviews ändern. Ich sehe keine Tint -Eigenschaft für die Uipickerview. Gibt es eine Möglichkeit, wie dies getan werden könnte? Oder eine Problemumgehung?

Vielen Dank.

War es hilfreich?

Lösung

Wenn Sie nur eine Problemumgehung wünschen, machen Sie einen Screenshot im Simulator, öffnen Sie ihn in Photoshop, probieren Sie ihn nur in den Bereich Uipickerview, machen Sie den Zentrum transparent, wenden Sie alles an, was Sie möchten, fügen Sie das Bild zu Ihrem Projekt hinzu und fügen Sie es als hinzu Ein UIImageview über der Uipickerview.

Andere Tipps

Sie können die Komponente auch maskieren. Mit etwas Fummel können Sie die Größe der Komponente erhalten und mit dem folgenden Code ausschneiden:

CALayer* mask = [[CALayer alloc] init];
        [mask setBackgroundColor: [UIColor blackColor].CGColor];
        [mask setFrame:  CGRectMake(10.0f, 10.0f, 260.0f, 196.0f)];
        [mask setCornerRadius: 5.0f];
        [picker.layer setMask: mask];
        [mask release];

Vergiss nicht

#import <QuartzCore/QuartzCore.h>

Mein Uipickerview hat 3 Komponenten. Und keine Auswahlanzeige.

Dies gibt ihm 11 Unteransicht. [[picker subviews] count]

Durch das Verstecken des ersten und der letzte Unteransicht wird der Hintergrund völlig entfernt.

[(UIView*)[[picker subviews] objectAtIndex:0] setHidden:YES];
[(UIView*)[[picker subviews] objectAtIndex:10] setHidden:YES];

Wenn Sie alle dritten anderen Unteransicht verstecken (Indizes 1, 4 und 7), verbirgt sich der undurchsichtige Hintergrund der Komponenten. Geben Sie eine schöne Wirkung, die ich häuten kann, wie ich es wünschte.

Hoffe das hilft jemandem :)

Der Picker hat keine Unteransicht, wenn er voll geladen ist. Wenn Sie versuchen, dies zu tun:

[(UIView*)[[picker subviews] objectAtIndex:0] setHidden:YES];
[(UIView*)[[picker subviews] objectAtIndex:10] setHidden:YES];

in der viewDidAdload oder viewWillappear es wird nicht funktionieren. Ich habe meine jedoch in eine der Uipickerview -Protokollmethoden bewegt und den Hintergrundrahmen entfernt.

- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    if (self.pickerBackgroundNotHidden)
    {
        self.pickerBackgroundNotHidden = false;
        [(UIView*)[[tempPicker subviews] objectAtIndex:0] setHidden:YES];
        [(UIView*)[[tempPicker subviews] objectAtIndex:7] setHidden:YES];
        [(UIView*)[[tempPicker subviews] objectAtIndex:8] setHidden:YES];
    }
    return [arrayColors objectAtIndex:row];
}

Sie könnten die Auswahl wahrscheinlich ein wenig effizienter machen, aber ich bevorzuge es, die Unterklasse zu vermeiden.

Oh, auch, das ist wahrscheinlich offensichtlich, aber wenn Ihre Auswahl keine Elemente enthält, löscht der obige Code die Unteransichten nicht.

Hier ist eine moderne Pixel-perfekte Version mit Bogen von @lukas 's Antwort, weil einige Fragen nie aus der Mode kommen:

#import <QuartzCore/QuartzCore.h>

// . . .

CALayer* mask = [[CALayer alloc] init];
         mask.backgroundColor = [UIColor blackColor].CGColor;
         mask.frame = CGRectInset(picker.bounds, 10.0f, 10.0f);
         mask.cornerRadius = 5.0f;
         picker.layer.mask = mask;

Diese Antwort funktioniert für jede Größe von Picker b/c Die Schichtabmessungen werden im Fliege berechnet.

                                                                 enter image description here

Sie können die Hintergrundfarbe ändern, indem Sie das Hintergrundbild vollständig durch eine Ihrer Wahl verwenden IXPickerOverlayView Erhältlich auf GitHub (Das Repo enthält ein illustriertes Beispiel für die Verwendung dieser Klasse).

Beachten Sie, dass Sie den (rechteckigen) Hintergrund selbst von Grund auf neu herausziehen müssen, aber im Gegensatz zu den hier genannten Problemumgehungen ist dieser Ansatz voll dynamisch: Die Steuerung sieht auch dann korrekt aus, wenn Sie die Anzahl der Picker -Räder und deren Größen in der Laufzeit ändern (Wie uidatepicker, wenn Sie die Einstellung des Systemgebietsschemas ändern).

Sobald Sie Ihr Hintergrundbild haben, verwenden Sie IXPickerOverlayView ist so einfach wie ein Hinzufügen a IXPickerOverlayView Instanz oben auf Ihrer Auswahlansicht und Zuweisung hostPickerView Eigentum.

Um Sie zu korrigieren, können Sie tatsächlich einen .png -Ontop der Uipickerview aufnehmen und dennoch die Auswahlansicht verwenden. Stellen Sie einfach sicher, dass die Mitte transparent ist oder Sie die Zeilen nicht sehen.

Sie können Folgendes machen:

Legen Sie die Hintergrundfarbe der Auswahlansicht nach Assistenten oder nach Code wie folgt fest:

Picker1.backgroundColor = [UIColor someColor];// clearColor for transparent

Setzen Sie den Alpha -Wert für die Picker View -Unteransicht mit 0, 1 und 3 (wissen Sie nicht, warum es Subview 2 -Gedanken gibt). Tun Sie dies nach dem Code nach den ersten Ladedaten für die Picker -Ansicht wie folgt (es wird eine Ausnahme ausgelöst, wenn Sie dies in der DidViewload tun).

[(UIView*)[[Picker1 subviews] objectAtIndex:0] setAlpha:someValue];// 0.0f for transparent
[(UIView*)[[Picker1 subviews] objectAtIndex:1] setAlpha:someValue];
[(UIView*)[[Picker1 subviews] objectAtIndex:3] setAlpha:someValue];

Vergessen Sie nicht, die Hintergrundfarbe für das Etikett zu löschen, das Sie an die Auswahlansicht in der Sucher -Methode senden.

lbl.backgroundColor = [UIColor someColor];// could be clearColor

Fügen Sie diese Zeile einfach einem Ihrer hinzu UIPickerView Methoden:

[[[MyPicker subviews] objectAtIndex:4] setBackgroundColor: [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"image.png"]]];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top