iOS浮动文本输入框

有时间了来整理一下一些小工具。


iOS的文本输入框默认是不会随键盘浮动的,所以在屏幕下方的文本输入控件,在输入时会被弹出的键盘挡住从而看不到输入的结果。网上也有很多解决的方案不多说,大家都比我讲得明白。

在这里记录并分享自己的小工具FloatableKeyboard。
下载地址:https://github.com/anjohnlv/FloatableKeyboard
(已更新,之前的版本默认开启了所有控件的浮动,可能会引起未知问题。)

使用方法:

1、直接使用: 下载FloatKeyboard,使用或继承FKTextFieldView或FKTextView。
2、自定义使用: 导入分类UIView+FloatKeyboard,对需要浮动的控件设置view.floatable = YES;。

这个小工具支持UITextField,UITextView,以及其他需要获取焦点进行交互的控件。
支持autolayout,autosizing,支持代码,也支持interface builder。
如果有什么bug欢迎斧正。


原理其实很简单,就是监听到键盘的显示和隐藏事件。然后获取出键盘高度,再根据屏幕高度和控件位置计算出需要浮动的距离。主要用到一个方法就是坐标映射。

- (void)keyboardWillShow:(NSNotification *)notification {
    CGFloat keyboardHeight = [[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size.height;
    CGFloat screenHeight = [[[UIApplication sharedApplication]keyWindow]bounds].size.height;
    CGFloat selfBottom = [self.superview convertRect:self.frame toView:[self viewController].view].origin.y + self.frame.size.height;
    CGFloat offset = selfBottom+keyboardHeight-screenHeight;
    double duration = [[notification.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
    if(offset > 0) {
        [UIView animateWithDuration:duration animations:^{
            [self viewController].view.frame = CGRectMake(0.0f, -offset, [self viewController].view.frame.size.width, [self viewController].view.frame.size.height);
        }];
    }
}

说完了。

gif.gif

你可能感兴趣的:(iOS浮动文本输入框)