2009-08-18 1 views

Antwort

8

helfen Ich gehe davon aus alles, was Sie die Farbe ändern möchten, von die Grenze des Pickers, nicht die Region in der Mitte, mit der der Benutzer interagiert. In diesem Fall wie folgt vor:

erstellen 4 „Deckel“ UIViews und fügen Sie sie direkt an den UIPicker, wie in:

[picker addSubview: coverView]; 

Position diese Ansichten über die oberen, unteren, linken und rechten Seite von die Auswahlgrenze. (Sie müssen mit Größen experimentieren.) Setzen Sie die backgroundColor der coverViews auf die gewünschte Farbe, und passen Sie die Alpha, um die Farbverlaufsschattierung von der Auswahl zu erhalten. Auch dies kann ein wenig experimentieren. Die Alternative wäre, eine große coverView zu erstellen, die den gesamten Picker abdeckt, und den - (UIView *) hitTest: (CGPoint) -Punkt mitEvent: (UIEvent *) zu überschreiben, so dass Ihre Cover-Ansicht die Berührungen für den Pflücker.

+1

Keine Notwendigkeit, mit hitTest zu verwirren, einfach Benutzerinteraktionen deaktivieren (imageView.userInteractionEnabled = NO) –

5

Sie können Ihre eigenen Picker, überprüfen Sie die UICatalog Beispielprojekt an Äpfeln Website erstellen, sie zeigen, wie eine benutzerdefinierte Picker zu machen, könnte es Sie https://developer.apple.com/iphone/library/samplecode/UICatalog/

+0

@ Daniel - Danke für die schönen Tutorial. Aber ich habe keine Lösung gefunden, um die Farbe von UIPicker –

+0

FYI zu ändern, der benutzerdefinierte Picker (dritte Wahl in der UISegmentedController auf dieser Seite der UICatalog-Anwendung) hat einen Fehler: Sie verlieren die Fähigkeit, einen Wert in der Auswahl einfach auszuwählen berühre es. Dieses Problem gab es von Anfang an und Apple hat es noch nicht behoben. Es passiert jedes Mal, wenn Sie die Ansichten in der Auswahl anpassen. – Amagrammer

+0

@Amagrammer Ich denke nicht, dass das ein Problem ist. Wenn Sie Ansichten benutzerdefiniert anpassen, können Sie steuern, welche Auswirkungen eine Berührung auf Ihre benutzerdefinierte Ansicht hat. Es ist sehr einfach, ein Steuerelement zu erstellen, das sich als ausgewählte Zeile einstellt. – Gabriel

4

Erstellen Sie ein einzelnes Overlay-Bild, wie es Amagrammer vorgeschlagen hat, aber fügen Sie es als Schaltfläche hinzu, anstatt es Ihrer Ansicht als Bild hinzuzufügen. Deaktivieren Sie dann die Interaktion auf der Schaltfläche, und die Auswahl empfängt die Berührungsereignisse, ohne etwas abfangen oder überschreiben zu müssen.

1

Sie können dies tun, indem 5 Image auch gefunden zu haben. Die erste ist von der Größe "Selection Indicator" und genau über "Selection Indicator". Ändern Sie nun das Alpha des imageView auf 0.2 oder was auch immer Sie wollen und fügen Sie auch Bild/Farbe nach Ihrer Wahl hinzu. Jetzt sehen Sie Ihren benutzerdefinierten "Selection Indicator". Ebenso können Sie für Grenzen tun. Fügen Sie jede Bildansicht zu vier Seiten der Auswahlansicht hinzu und passen Sie sie der Größe der Rahmengröße an. Füllen Sie nun die gewünschten Bilder/Farben in diesem ImageView.

0

Sie müssen eine neue UIView mit einer UIImageView darin erstellen und diese dann als Zubehör für die Zelle festlegen. Sie müssen also ein Bild wie das Standardzubehör erstellen, aber in der gewünschten Farbe.

UIView* accessoryView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 24, 50)]; 
UIImageView* accessoryViewImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"NEWIMAGE.png"]]; 
accessoryViewImage.center = CGPointMake(12, 25); 
[accessoryView addSubview:accessoryViewImage]; 
[cell setAccessoryView:accessoryView]; 
[accessoryViewImage release]; 
[accessoryView release]; 

zum Ändern Textfarbe hier ist die Lösung

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

CGRect imageFrame = CGRectMake(0.0, 0.0, 15, 15); 
UIImageView *label = [[[UIImageView alloc] initWithFrame:imageFrame] **autorelease**]; 

if (row == 0) 
{ 
    label.backgroundColor = [UIColor redColor]; 
} 
if (row == 1) 
{ 
    label.backgroundColor = [UIColor blueColor]; 
} 
if (row == 2) 
{ 
    label.backgroundColor = [UIColor blackColor]; 
} 
return label; 
} 
Verwandte Themen