Xamarin - Как наложить вид слоя поверх другого, например клавиатуры
Вопрос
У меня есть пользовательский интерфейс, который я хочу показывать как клавиатуру, когда пользователь нажимает на часть экрана.Я видел примеры, однако они ссылаются на методы вне UIView, которые, похоже, не существуют (может быть, это потому, что у меня есть лицензия Starter?), например, UIView.beginAnimations там нет.
Есть ли у кого-нибудь Xamarin (т.е.Пример MonoTouch)?
Я хочу, чтобы моя часть пользовательского интерфейса отображалась и прокручивала существующий вид так, чтобы поле было правильно видно.
Решение
UITextView
и UITextField
иметь inputView
свойство, которое позволяет вам достичь именно того, что вам нужно.Настройте представление, установите его в качестве своего вида ввода, и как только пользователь создаст текстовое представление или текстовое поле для первого ответа, появится ваше представление.iOS7 имеет UIInputView
класс, который вы можете подклассифицировать, чтобы получить такой же фоновый вид, как у клавиатуры.
Другие советы
Почему бы вам не создавать свой вид и разместить его за пределами видимого вида.Когда вы хотите показать это, вы просто переместите его в видимую область.Таким образом, вы также можете добавить анимацию.
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;
}
.
Чтобы показать его при необходимости:
- (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];
}
.