Substituant la sélection mise en surbrillance dans UIPickerView
J'ai un custom UIPickerView
où je l'utiliser:
-(UIView *)pickerView:(UIPickerView *)pickerView
viewForRow:(NSInteger)row
forComponent:(NSInteger)component
reusingView:(UIView *)view
pour remplir le sélecteur avec UILabels
. Est-il un moyen de désactiver le comportement de mise en évidence de la ligne sélectionnée lors d'un contact?
Je pense que c'est une propriété de la sous-jacentes UITableViewCell
inhérents à la UIPickerView
et je ne peux pas trouver un moyen de le changer.
OriginalL'auteur Jon | 2009-06-05
Vous devez vous connecter pour publier un commentaire.
Vous devez vous assurer que votre vue personnalisée a les propriétés suivantes:
pickerView:rowHeightForComponent:
etpickerView:widthForComponent:
. La hauteur par défaut est de 44 si vous n'êtes pas la spécification d'une hauteur personnalisée.[UIColor clearColor]
.Une chasse aux sorcières lors de l'utilisation de
UILabel
instances comme la vue personnalisée est queUILabel
par défautuserInteractionEnabled
àNO
(UIView
, d'autre part, les valeurs par défaut de cette propriétéYES
).Sur la base de ces exigences, le code d'exemple de Halle peut être réécrit comme suit. Cet exemple aussi correctement réutilise créé précédemment vues, ce qui est nécessaire pour le défilement rapide de la performance.
OriginalL'auteur Doug Barth
Réglage de la
userInteractionEnabled
propriété deUILabel
àYES
correctifs de la mise en évidence de problème, mais il désactive également leUIPickerView
de le défilement automatique pour sélectionner la ligne qui a été touché.Si vous souhaitez désactiver la mise en évidence de comportement, mais de maintenir la
UIPickerView
par défaut le défilement automatique de la fonctionnalité, appelez lesetShowSelection
fonction dans leUITableCell
les instances contenues dans leUIPickerView
. Une façon de le faire est à la sous-classe leUILabel
classe semblable à la suivante:PickerViewLabel.h -
PickerViewLabel.m -
Alors, où vous aviez été de retourner une instance de
UILabel
danspickerView:viewForRow:forComponent:reusingView:
, retourner une instance dePickerViewLabel
. Comme un exemple, en utilisant le code de Doug, vous devez remplacer tous les cas de 'UILabel
' avec 'PickerViewLabel
'. N'oubliez pas de supprimer lepickerRowLabel.userInteractionEnabled = YES;
ligne.Hey Shailesh, Il est difficile de dire w/o en voyant ton code, mais j'ai quelques idées de pourquoi il ne serait pas appelé. 'didMoveToSuperview' est une fonction de UIView qui est appelée automatiquement à chaque fois qu'une UIView est ajouté ou supprimé à partir d'un point de vue. Est votre vue personnalisée certainement être ajouté à l'écran? Si vous faites un test rapide et d'ajouter une instance de votre classe comme une sous-vue d'un UIViewController, voyez-vous 'didMoveToSuperview' être appelé? Si non, je suppose que vous avez une faute de frappe quelque part dans la déclaration de la fonction.
génial.... merci beaucoup .. u a sauvé ma vie et beaucoup de temps
OriginalL'auteur Christine
Je suppose que vous voudrez peut-être chercher à "showsSelectionIndicator" propriété de UIPickerView
OriginalL'auteur
Je ne suis pas sûr si il ya un moyen facile de supprimer le commentaire de sélection, mais vous pouvez le couvrir si vous faites l'arrière-plan de l'étiquette blanche et la taille de la même dimension que le bleu rectangle de sélection:
Avec une largeur de 316 l'étiquette couvre l'ensemble mais un peu de bleu sur chaque côté, et au 320, elle recouvre entièrement le commentaire de sélection, mais elle commence également à couvrir un peu de la roue à l'extérieur des gradients, qui peuvent ou peuvent ne pas vous ennuyer.
OriginalL'auteur Halle