Мой следующий код:клавиатура не показывать в первый раз (IOS)
- (void)setupSubViews {
[self addSubview:self.textView];
[self addSubview:self.sendButton];
[self.textView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(5);
make.bottom.equalTo(-5);
make.leading.equalTo(9);
}];
[self.sendButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.equalTo(self);
make.trailing.equalTo(-9);
make.leading.equalTo(self.textView.mas_trailing).offset(7);
make.width.equalTo(60);
make.height.equalTo(40);
}];
}
Шоу функцию, чтобы сделать TextView becomeFirstResponder
- (void)show {
UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
[keyWindow addSubview:self];
[self mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.trailing.equalTo(0);
make.bottom.equalTo(InputHeight);
}];
[self.textView becomeFirstResponder];
}
Это мнение добавить к keyWindow в нижней части В начало , его перевод будет меняться после клавиатуры, когда изменится рамка клавиатуры.
- (void)keyboardWillChangeFrame:(NSNotification *)noti {
if (!self.textView.isFirstResponder) {
return;
}
NSValue *endFrame = noti.userInfo[@"UIKeyboardFrameEndUserInfoKey"];
CGFloat endY = [endFrame CGRectValue].origin.y;
BOOL isBackToBottom = endY == UI_SCREEN_HEIGHT;
CGFloat needOffset = endY - (UI_SCREEN_HEIGHT + InputHeight);
if (isBackToBottom) {
[UIView animateWithDuration:0.25 animations:^{
self.transform = CGAffineTransformIdentity;
} completion:^(BOOL finished) {
[self removeFromSuperview];
}];
} else {
[UIView animateWithDuration:0.25 animations:^{
self.transform = CGAffineTransformMakeTranslation(0, needOffset);
}];
}
}
Use Case: ViewController имеет кнопку, кнопка щелчка действия так:
- (void)beginChat {
[self.inputView show];
}
self.inputView является выше customView,
- (LiveChatInputView *)inputView {
if (!_inputView) {
_inputView = [LiveChatInputView new];
_inputView.sendBlock = ^(NSString *string) {
....
};
}
return _inputView;
}
Теперь мой вопрос заключается в том, что, когда мы вызываем функцию show
в первый раз после запуска приложения, клавиатура не будет отображаться, но вызов show
функция во втором ти меня, все хорошо.
Как справиться с этим вопросом, THX.
в первый раз, когда функция show называется check, что self.textView равен нулю или нет. –
Вы тестируете устройство или симулятор? на sim это обычная проблема, что клавиатура иногда работает неправильно. – zero3nna
@Fahad Jamal Я уверен, что self.textView не ноль – Archerlly