Xamarin - Comment superposer une vue sur une autre, comme le clavier
Question
J'ai une interface utilisateur personnalisée que je souhaite afficher comme le clavier lorsqu'un utilisateur clique sur une partie de l'écran.J'ai vu des exemples, mais ils font référence à des méthodes hors de UIView qui ne semblent pas exister (c'est peut-être parce que j'ai la licence Starter ?), par exemple UIView.beginAnimations n'est pas là.
Quelqu'un a-t-il un Xamarin (c'est-à-direMonoTouch) exemple ?
Je souhaite que mon élément d'interface utilisateur s'affiche et fasse défiler la vue existante afin que le champ soit correctement visible.
La solution
UITextView
et UITextField
avoir inputView
propriété, qui vous permet de réaliser exactement ce dont vous avez besoin.Configurez la vue, définissez-la comme vue d'entrée, et une fois que l'utilisateur aura créé une vue de texte ou un premier intervenant dans le champ de texte, votre vue apparaîtra.iOS7 a UIInputView
classe, que vous pouvez sous-classer, pour obtenir une vue d’arrière-plan similaire à celle du clavier.
Autres conseils
Pourquoi ne créez-vous pas votre vue et placez-le en dehors de la vue visible.Lorsque vous voulez le montrer, vous venez de le déplacer dans la zone visible.De cette façon, vous pouvez également ajouter l'animation.
NSLayoutConstraint *yourHiddenViewYConstraint;
- (void)viewDidLoad
{
[self.view addSubView:yourHiddenView];
[yourHiddenView setHidden:YES];
UIView *selfView = self.view
yourHiddenView.translatesAutoresizingMaskIntoConstraints = NO;
// add your needed constraints, other than the one below
yourHiddenViewYConstraint = [NSLayoutConstraint constraintWithItem:yourHiddenView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:selfView
attribute:NSLayoutAttributeTop
multiplier:1.0
constant:0];
[selfView addConstraint:yourHiddenViewYConstraint];
yourHiddenViewYConstraint.constant += self.view.frame.size.height;
}
Pour le montrer en cas de besoin:
- (void)showView
{
[yourHiddenView setHidden:NO];
dispatch_async(dispatch_get_main_queue(), ^(void) {
[self changeConstraint:yourHiddenViewYConstraint withConstant:-self.view.frame.size.height];
});
}
- (void)changeConstraint:(NSLayoutConstraint *)constraint withConstant:(CGFloat)constant
{
constraint.constant += constant;
void (^anim)(void) = ^{
[self.view layoutIfNeeded];
};
[UIView animateWithDuration:0.5 animations:anim completion:nil];
}