Xamarin - Cómo capa en la parte superior de otro, como el teclado
Pregunta
Tengo una UI personalizada que quiero mostrar como el teclado cuando un usuario hace clic en una parte de la pantalla.Sin embargo, he visto ejemplos, hacen referencia a los métodos de UIView que no parecen existir (tal vez es porque tengo la licencia de inicio "), por ejemplo, uIView.beginanimations no está ahí.
¿Alguien tiene un ejemplo de Xamarin (I.E. MONOTOUCH)?
Quiero que se muestre mi pieza de interfaz de usuario, y para desplazar la vista existente para que el campo sea visible correctamente.
Solución
UITextView
y UITextField
tiene una propiedad inputView
, que le permite lograr exactamente lo que necesita.Configure la vista, configúrela como su vista de entrada, y una vez que el usuario realice una vista de texto o un campo de texto primero, aparecerá su opinión.iOS7 tiene una clase UIInputView
, que puede subclase, para lograr una vista de fondo similar como el teclado.
Otros consejos
¿Por qué no creas tu vista y lo colocas fuera de la vista visible?Cuando quiera mostrarlo, simplemente lo mueve al área visible.De esa manera también puedes agregar la animación.
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;
}
para mostrarlo cuando sea necesario:
- (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];
}