Masquer/ Montrer UIPickerView
J'Ai un un touchesEnded événement qui vérifie lorsqu'un objet UITextField est pressé. Ce que je voudrais faire est de masquer/afficher une UIPickerView. Comment cela peut-il être fait?
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [[event allTouches] anyObject];
if (CGRectContainsPoint([self.textField frame], [touch locationInView:self.view]))
{
NSString * error = @"Touched the TextField";
UIAlertView * errorAlert = [[UIAlertView alloc] initWithTitle:@"Selection!" message:error delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[errorAlert show];
//Want to show or hide UIPickerView
}
}
J'ai déjà un alloués UIPickerView lorsque les touches se produisent
@interface ThirdViewController : UIViewController <UITextFieldDelegate,UIPickerViewDelegate> {
IBOutlet UIPickerView *pickerView;
}
Vous devez vous connecter pour publier un commentaire.
UIPickerView hérite de UIView, de sorte que vous devriez être en mesure de simplement basculer son "caché" de la propriété:
Le basculement de la "cachés" de la propriété fera l'affaire, mais aussi à donner une très brusque de la révéler.
Une façon d'éviter cela est d'obtenir le sélecteur de glisser vers le haut à partir du bas de l'écran, en l'intégrant à l'intérieur d'un UIActionSheet.
Voici un exemple:
Lorsque vous avez terminé avec le sélecteur, de les rejeter:
Cette approche peut également être utilisée pour incorporer des boutons dans une barre au-dessus du sélecteur ("Faire", "Précédent", "Suivant", etc) - il y a une bonne explication de comment le faire ici.
Parce que j'ai vu un commentaire à propos de ces solutions ne fonctionne pas sur iOS 7, je vais supposer que ce fil est toujours d'actualité et recherchée.
La meilleure façon que j'ai trouvé à faire c'est par la fixation de la UIPickerView à un (caché)UITextField que l'entrée vue comme:
Vous pouvez toujours cacher le champ de texte si vous le souhaitez. Ensuite, vous pouvez afficher/masquer la UIPickerView en activant le textfield comme premier intervenant comme:
J'ai vérifié cela fonctionne sur iOS 7 et je l'ai fait travailler aussi loin que iOS 5.
Je suis à l'aide d'un mannequin
UITextField
pour afficher /masquer laUIPickerView
Tout d'abord, ajoutez un UITextField comme un
@property
sur votreUIViewController
. Vous pouvez éventuellement ajouter l'UIPickerView
, ainsiDeuxième, attribuer un
UIPickerView
commeinputView
pour laUITextField
. Attribuez-vous que ledataSource
et ladelegate
pour laUIPickerView
.UITextField
doit être ajouté en tant que sous-vue sur votreUIViewController
'sview
.Enfin, ajouter un mécanisme pour afficher et masquer la
UIPickerView
. Depuis que je suis à l'aide d'un mannequinUITextField
, j'ai décidé d'ajouter unUIBarButtonItem
nommé "Filtre" à la suite deIBAction
:Vous pouvez utiliser ActionSheetPicker-3.0
Il ressemble UIPickerView à l'intérieur de
UIActionSheet
, et il a également adopté pour iOS 6-7-8.J'ai donc utilisé de nombreuses références à essayer de comprendre cela et puis ma meilleure référence (croyez-le ou non), de la pomme docs sur UIView Classe de référence.
J'ai construit une mini-Vue ("_pickerView" sur le dessus de mon écran principal qui s'est tenue une UIToolBar, UIToolButton (Avec IBAction "closePicker"), et la UIPicker.
***veuillez noter qu'il est uniquement valable pour iOS 4.0 et
le code pour la fermeture et l'affichage de la UIView ("_pickerView") est:
Et pour votre viewDidLoad viens de l'appeler "closePicker" pour avoir la vue cachée sur la charge
Dans un scrollView en fonction de l'application, l'affichage et le masquage UIPickerView pourrait être une question difficile car il est relativement dur à la broche vers le bas de la visible rectangle d'écran. Vous pouvez le faire facilement avec le code suivant.
Pour résumer, vous créez un UIAlertController avec un message vide. Afin de rendre le alertController d'avoir la taille de votre pickerView, vous donner le message nécessaires en nombre de sauts de ligne. Et enfin, vous ajoutez votre pickerView comme une sous-vue de alertController.vue
Puis vous suivez les sélectionnés pickerView des lignes avec le UIPickerViewDelegate méthodes.
J'ai cherché partout un moyen propre à masquer et afficher (à bascule) UIPickerView à l'aide d'un seul bouton de l'élément et ne se trouve que de pièces et de morceaux. Pour ceux qui cherchent à faire de même, voici mon résultat via une instruction conditionnelle.
ViewController.m
Alors, voici ce qui se passe ici: j'ai un bouton de l'élément appelé "userSelection" avec un titre de "Sélectionner" et caché UIPickerView appelé "userPicker" (pour masquer, il suffit de copier le bit sur "_userPicker.caché", le coller dans votre sélecteur de déclaration, et de définir le booléen à OUI). Le bouton de l'élément est connecté à l'action ci-dessus. En charge (c'est à dire lorsque le bouton est le titre dit "Select"), il permet de faire apparaître le sélecteur et l'anime en vue. Vous pouvez utiliser le animateWithDuration et options de délai pour le contrôle de cette fonction, mais ces paramètres semblent assez naturel pour moi.
Ensuite, j'ai cette méthode de changer le bouton du titre à "Done" lorsque quelque chose a été sélectionné. Je suis positif, il y a une manière plus propre de faire ce peu, mais la méthode switch me donne une certaine liberté dans le cas où je veux faire des changements de l'INTERFACE plus tard.
Enfin, l'action se termine avec un "else if" qui dit que quand le bouton "Terminé", de masquer le sélecteur à l'inverse de l'animation (le même code, mais avec "pvHeight * -2") et définit ensuite le bouton du titre pour en revenir à "Sélectionner", qui sert à compléter la boucle de l'ensemble de l'action.
Probablement un moyen plus facile pour les pros, mais pour les gens qui sont nouveaux à ce genre de choses, comme moi, ce qui fait le plus de sens logique. De Plus il fonctionne, donc c'est toujours un bonus!
Ci-dessous est un exemple de code pour masquer et afficher des
UIPickerView
avec animation:-//Pour L'Affichage
//Pour cacher