iOSキーボードが入力ボックスをブロックする解決方法
本論文では、iOSキーボードのイジェクトブロックの解決方法を共有します。参考にしてください。具体的な内容は以下の通りです。
問題:入力ボックスはキーボードでブロックされています。
期待効果:入力ボックスはキーボードの上にあります。
解決策:
キーボードの出現と消失の状態をモニターして、キーボードが現れたら、現在のビューを上に移動し、入力が完了したらキーボードを閉じると、ビューは初期状態に戻ります。
難点:ビューを上に移動する距離
原理は同じです。oc版の参考コード:
問題:入力ボックスはキーボードでブロックされています。
期待効果:入力ボックスはキーボードの上にあります。
解決策:
キーボードの出現と消失の状態をモニターして、キーボードが現れたら、現在のビューを上に移動し、入力が完了したらキーボードを閉じると、ビューは初期状態に戻ります。
難点:ビューを上に移動する距離
原理は同じです。oc版の参考コード:
self.phoneInput = [UITextField new];
self.phoneInput.placeholder = @" ...";
[self.view addSubview:self.phoneInput];
///
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
}
- (void)keyboardWillShow:(NSNotification *)notification
{
// view
NSArray *textFields = @[self.phoneInput];
UIView *focusView = nil;
for (UITextField *view in textFields) {
if ([view isFirstResponder]) {
focusView = view;
break;
}
}
if (focusView) {
//
double duration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
// Y
CGFloat keyboardY = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue].origin.y;
// window Y
CGRect rect = [focusView convertRect:focusView.bounds toView:[[[UIApplication sharedApplication] delegate] window]];
CGPoint tmp = rect.origin;
CGFloat inputBoxY = tmp.y + focusView.frame.size.height;
//
CGFloat ty = keyboardY- inputBoxY;
NSLog(@"position keyboard: %f, inputbox: %f, ty: %f", keyboardY, inputBoxY, ty);
// 0,
[UIView animateWithDuration:duration animations:^{
if (ty < 0) {
self.view.transform = CGAffineTransformMakeTranslation(0, ty);
}
}];
}
}
- (void)keyboardWillHide:(NSNotification *)notification
{
//
double duration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
//
[UIView animateWithDuration:duration animations:^{
self.view.transform = CGAffineTransformMakeTranslation(0, 0);
}];
}
///<UITextFieldDelegate>
///UITextFieldDelegate ,
-(void)textFieldDidEndEditing:(UITextField *)textField
{
self.view.frame =CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width,[[UIScreen mainScreen] bounds].size.height);
}
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。