2009-08-18 10 views

Répondre

8

Je suppose que tout ce que vous voulez changer la couleur la bordure du sélecteur, pas de la région au centre avec laquelle l'utilisateur interagit. Dans ce cas, procédez comme suit:

Créer 4 « couverture » UIViews et les ajouter directement à la UIPicker, comme dans:

[picker addSubview: coverView]; 

Position ces vues sur le dessus, les côtés de bas, à gauche et à droite de la bordure du sélecteur. (Vous devrez expérimenter avec des tailles.) Définissez la couleur de fond des CoverViews à la couleur que vous voulez, et ajustez l'alpha pour obtenir l'ombrage de gradient du sélecteur. Encore une fois, cela peut prendre un peu d'expérimentation. L'alternative serait de créer un grand coverView qui couvre l'intégralité du sélecteur, et de remplacer la méthode événementielle - (UIView *) hitTest: (CGPoint) avec Event: (UIEvent *) afin que votre vue de couverture n'intercepte pas le touches signifiées pour le sélecteur.

+1

Pas besoin de jouer avec hitTest, il suffit de désactiver les interactions utilisateur (imageView.userInteractionEnabled = NO) –

5

Vous pouvez créer vos propres ramasseurs personnalisés, consultez l'exemple de projet UICatalog sur le site pommes, ils montrent comment faire un sélecteur personnalisé, il peut vous aider à https://developer.apple.com/iphone/library/samplecode/UICatalog/

+0

@ Daniel - merci pour le tutoriel agréable. Mais je n'ai trouvé aucune solution pour changer la couleur de UIPicker –

+0

FYI, le sélecteur personnalisé (troisième choix dans le UISegmentedController sur cette page de l'application UICatalog) a un défaut: vous perdez la possibilité de sélectionner une valeur dans le sélecteur par simplement le toucher. Ce problème a été là depuis le début et Apple ne l'a pas encore résolu. Cela arrive chaque fois que vous personnalisez les vues à l'intérieur du sélecteur. – Amagrammer

+0

@Amagrammer Je ne pense pas que ce soit un problème. Si vous personnalisez des vues, l'approche logique consiste à prendre le contrôle de ce que fait une touche sur votre vue personnalisée. Il est très facile de faire de votre vue un contrôle qui se définit comme une ligne sélectionnée. – Gabriel

4

Créez une seule image de surimpression comme suggéré par Amagrammer, mais au lieu de l'ajouter à votre vue en tant qu'image, ajoutez-la en tant que bouton. Ensuite, désactivez l'interaction sur le bouton et le sélecteur recevra les événements tactiles sans devoir intercepter ou remplacer quoi que ce soit.

1

Vous pouvez le faire en ajoutant 5 ImageView aussi. Le premier est de taille "Indicateur de sélection" et le place exactement sur "Indicateur de sélection". Maintenant, changez l'alpha de cette imageView à 0.2 ou ce que vous voulez et ajoutez également l'image/couleur selon votre choix. Maintenant, vous verrez votre "indicateur de sélection" personnalisé. En outre, la même chose que vous pouvez faire pour les frontières. Ajoutez chaque image aux quatre côtés de la sélection et faites en sorte que sa taille soit égale à la taille de la bordure. Maintenant, remplissez les images/couleurs que vous voulez dans ce ImageView.

0

Vous devrez créer un nouvel UIView avec un UIImageView à l'intérieur, puis le définir comme Accessoire pour la cellule. Vous aurez donc besoin de créer une image comme l'accessoire par défaut, mais dans la couleur que vous voulez.

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

pour changer la couleur du texte est ici la solution

- (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; 
} 
Questions connexes