3 votes

Comment afficher et masquer l'UIPickerView comme le clavier d'iOS ?

J'ai ce code pour cacher UIPickerView par défaut :

- (void)viewDidLoad
{
    [super viewDidLoad];
    [_memberList setAlpha:0];
}

et ce code pour montrer UIPickerView quand un bouton est tapé :

- (IBAction)buttonChooseMember {    
    [UIView animateWithDuration:0.6 delay:0. options:UIViewAnimationOptionCurveEaseInOut animations:^{
        [_memberList setAlpha:1];
    } completion:nil];
}

et la dernière chose est la suivante, pour cacher le clavier lorsque l'utilisateur tape n'importe où :

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    for (UIView * txt in self.view.subviews){
        if ([txt isKindOfClass:[UITextField class]]) {
            [txt resignFirstResponder];
        }else if ([txt isKindOfClass:[UIPickerView class]]) {
            [UIView animateWithDuration:0.6 delay:0. options:UIViewAnimationOptionCurveEaseInOut animations:^{
                [_registerMLMList setAlpha:0];
            } completion:nil];
        }
    }
}

mais tout cela ne me donne qu'une animation "d'apparence", parce que la valeur Alpha ne change que de 0 à 1 (et vice versa). pas de glissement vers le haut ou vers le bas comme le clavier iOS.

J'ai essayé d'utiliser l'animation ci-dessous pour donner l'apparence d'un clavier iOS à mon UIPickerView :

- (IBAction)hidePicker {

    UIPickerView *pickerView = [[UIPickerView alloc] init]; // default frame is set
    float pvHeight = pickerView.frame.size.height;
    float y = _screen.bounds.size.height - (pvHeight * -2); // the root view of view controller
    [UIView animateWithDuration:0.5f delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
        self.picker.frame = CGRectMake(0 , y, pickerView.frame.size.width, pvHeight);
    } completion:nil];
}

- (IBAction)showPicker {
    UIPickerView *pickerView = [[UIPickerView alloc] init]; // default frame is set
    float pvHeight = pickerView.frame.size.height;
    float y = _screen.bounds.size.height - (pvHeight); // the root view of view controller
    [UIView animateWithDuration:0.5f delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
        self.picker.frame = CGRectMake(0 , y, pickerView.frame.size.width, pvHeight);
    } completion:nil];
}

J'aime cette animation, elle ressemble à l'animation du clavier d'iOS, mais le problème avec cette animation est... quand mon application est chargée, le UIPickerView est déjà affiché. comment le cacher quand il se charge pour la première fois ?

Merci.

17voto

Dave DeLong Points 156978

Tous UIResponder Les objets ont un inputView propriété. Le site inputView d'un UIResponder est la vue qui sera montrée à la place du clavier lorsque le répondeur devient le premier intervenant .

Donc si vous voulez un UIPickerView pour s'afficher à la place du clavier, vous pourriez simplement le faire en faisant de votre UIResponder (comme un UITextField ) ont un UIPickerView comme son inputView .

(Avertissement : vous ne voudrez probablement pas d'un appareil UIPickerView comme le inputView car il faut également tenir compte des cas où le clavier change de taille, par exemple lorsque vous effectuez une rotation. Mais c'est l'idée générale).

0voto

Prasad_R Points 559

Sur viewDidLoad prendre une variable booléenne et lui donner la valeur suivante TRUE et de définir également le UIPickerView de sorte que UIPickerView En fonction de la valeur booléenne, les animations de cadre sont gérées pour afficher ou masquer la vue du sélecteur.

0voto

Prashant N Points 1127

L'idée des méthodes hidepicker et showpicker est bonne, et le problème de "UIPicker est visible lorsque l'application est chargée" peut être résolu en fixant simplement le cadre de UIPickerView lors de son lancement à la position telle qu'il ne devrait pas être visible... après quoi vous pouvez appeler la méthode showpicker pour afficher la vue du sélecteur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X