iOS-UITextView 的收起键盘及动态大小

来源:互联网 发布:淘宝网韩版卫衣 编辑:程序博客网 时间:2024/04/30 14:46

UITextView跟UITextField很相似,两者都是用于用户输入文本内容的控件,UITextFiled收起键盘方式及介绍
UITextView的父类是UIScrollView,它是能滑动的,可以显示和编辑大量文本。其实有些应用使用到textView来写文章时,并不会加入收起键盘这个操作,如网易的LOFTER,它的UITextview其实就是键盘以上这么大,不会动态改变。

UITextView的大小应该随着键盘的show与hide来改变,这样做用户体验才会更好!

UITextView的收起键盘方式

1.按return健收起键盘

_textView.delegate = self;//设置代理//按回车收起键盘- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {    if ([text isEqual:@"\n"]) {//判断按的是不是return        [_textView resignFirstResponder];        return NO;    }    return YES;}

这样只要键盘上的return被点击就会收起键盘了。但是这个方法并不是很好,写文章想换行时,把键盘给收起了。因此不推荐这个方法。

2.增加ToolBar及其上面的UIBarButtonItem收起键盘

收起键盘的本质就是-resignFirstResponder,因此只要有按钮绑定这个方法,放哪都可以收起键盘。

- (void)addToolBar {    UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 375, 30)];//创建toolbar    UIBarButtonItem *item = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(hiddenKeyboard)];//创建系统item按钮,并绑定一个方法    [toolbar setItems:@[item]];//将item添加到toolbar上    [_textView setInputAccessoryView:toolbar];//将toolbar添加到InputAccessoryView上}- (void)hiddenKeyboard {    [_textView resignFirstResponder];}

toolbar
点击红色圈圈里面的item就可以收起键盘啦,这个inputAccessoryView,它使随着键盘的出现而出现,消失而消失,非常方便,还有很多可以扩展的地方,这里不一一介绍。

3.通过滑动textView收起键盘

UITextView的父类是UIScrollView,scrollView的代理方法他当然也是可以用的。
但是UITextView在文字高度小于textview高度时,是不能滑动的,因此代理方法也不会调用,只有textView的大小不能完全显示文字时,才可以滑动。

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {//滑动开始时调用    [_textView resignFirstResponder];}

UITextView 的动态大小

上一张图中,键盘把文字遮住了,看不到自己输入了什么,就无法继续输入文字了。让键盘弹出时,textview随着键盘“上升”,这是一个不错的解决方法。

textview“上升”的本质就是frame中的高度改变,首先要确定键盘上升了多少才能确定textview的高度要减少多少。(注意:不同机型的键盘高度是不同的,不同的键盘类型的高度也是不同的,如英文和中简,emoji都有差别)

先用toolBar上的item演示textview的动态高度

本文采用的机型是iPhone6,屏幕大小的动态获取比较简单,为了节省时间(偷懒~~)全部采用了(375,667)。

在ViewDidLoad中添加通知

    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(showKeyboard:) name:UIKeyboardDidShowNotification object:nil];//添加键盘已经弹出的通知    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(hideKeyboard:) name:UIKeyboardWillHideNotification object:nil];//添加键盘即将收回的通知

通知对应的方法

//键盘弹出时调用的方法- (void)showKeyboard:(NSNotification *)notification {    NSDictionary *info = [notification userInfo];    NSValue *value  = [info valueForKey:UIKeyboardFrameBeginUserInfoKey];    CGSize size = [value CGRectValue].size;//获取键盘高度    _textView.frame = CGRectMake(0, 20, 375, 667 - 20 - size.height);//改变textview的frame}//键盘即将收回时调用的方法- (void)hideKeyboard:(NSNotification *)notification {    [UIView animateKeyframesWithDuration:.3 delay:0 options:UIViewKeyframeAnimationOptionLayoutSubviews animations:^{        _textView.frame = CGRectMake(0, 20, 375, 667 - 20);    } completion:nil];//将textView的frame复原,加一个动画效果,否则好难看}

总结一下,键盘收起方式:
第一种。按return收起,写文章经常会用到回车,因此不实用,基本不考虑。
第二种。添加toolbar,比较方便,可拓展性强,推荐。
第三种。滑动收起,缺点是文字少的情况下无法收起,当然文字少的情况下,键盘不可能会遮住文字,也没必要收起键盘。优点是操作更加人性化。

0 0