Unity中iOS软键盘遮挡输入框的问题处理小记

文章目录[x]
  1. 1:问题描述
  2. 2:期望
  3. 3:解决方案
  4. 4:参考

问题描述


  1. iOS软键盘遮挡住登陆界面的账号密码输入框
  2. 该登陆界面由SDK负责,本人无法获取其View

 

期望


  1. 要求点击输入框后,游戏画面整体抬升使得输入框能显示在玩家手指能点击到的位置。
  2. 点击背景能关闭软键盘

 

解决方案


画面抬升

// 注册键盘出现的通知
[[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 {
    //获取键盘高度,在不同设备上,以及中英文下是不同的
    CGFloat kbHeight = [[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size.height;
    
    //计算出键盘顶端到inputTextView panel底端的距离(加上自定义的缓冲距离INTERVAL_KEYBOARD)
    CGRect rootViewRect = [[AppDelegate app] rootView].frame;
    CGFloat offset = (/*rootViewRect.origin.y + */rootViewRect.size.height + INTERVAL_KEYBOARD) - (rootViewRect.size.height - kbHeight);
    
    // 取得键盘的动画时间,这样可以在视图上移的时候更连贯
    double duration = [[notification.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
    
    //将视图上移计算好的偏移
    if(offset > 0) {
        [UIView animateWithDuration:duration animations:^{
            [[AppDelegate app] rootView].frame = CGRectMake(0.0f, -offset, rootViewRect.size.width, rootViewRect.size.height);
        }];
    }
}

///键盘消失事件
- (void) keyboardWillHide: (NSNotification *)notification {
    // 键盘动画时间
    double duration = [[notification.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
    CGRect rootViewRect = [[AppDelegate app] rootView].frame;
    //视图下沉恢复原状
    [UIView animateWithDuration:duration animations:^{
        [[AppDelegate app] rootView].frame = CGRectMake(0, 0, rootViewRect.size.width, rootViewRect.size.height);
    }];
}

点击背景收回键盘

// 在头文件中声明此变量
@property(nonatomic, retain) UITapGestureRecognizer* tap;

// 初始化时
self.tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapHandler:)];

// 每次登陆前
[[[AppDelegate app] rootView] addGestureRecognizer: self.tap];

// 登陆成功后
[[[AppDelegate app] rootView] removeGestureRecognizer: self.tap];

// 监听函数
- (void)tapHandler: (UITapGestureRecognizer *)sender
{
    [[[AppDelegate app] rootView] endEditing:YES];
}

 

AppDelegate是继承自UnityAppController的类

@implementation AppDelegate

+ (UnityAppController*)app
{
    return GetAppController();
}

@end

 

参考

ios 让textView被键盘挡住上移
iOS关闭键盘的三种方法

 

点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像