So ändern Sie die Farbe des Uipickerview -Selektors
-
13-09-2019 - |
Frage
Ich habe einen Uipicker, ich möchte die Farbe des Selektors ändern. Ist es möglich, die Farbe des Selektors zu ändern?
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