UITextView仿微信输入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UITextView仿微信输入相关的知识,希望对你有一定的参考价值。

UITextView仿微信输入

输入和删除文字的时候不会出现抖动,也不会出现一行文字显示一半的情况,代码中部分数据用的是死数据,用的时候要灵活运用,适当调整一下!

#define textFont [UIFont systemFontOfSize:16]

#import "ViewController.h"

@interface ViewController ()<UITextViewDelegate>

@property (nonatomic, weak) UITextView *textView;

@property (nonatomic, assign, getter=isMark) BOOL mark;

@end

 

@implementation ViewController

 

- (void)viewDidLoad {

    [super viewDidLoad];

    UITextView *textView=[[UITextView alloc]initWithFrame:CGRectMake(100, 200, 214, 30)];

    _textView=textView;

    _textView.font=textFont;

    //不然设置的行间距不起作用

    _textView.text=@" ";

    //设置控件文字的上下距离

    _textView.textContainerInset=UIEdgeInsetsMake(5, 0, 5, 0);

    

    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];

    

    paragraphStyle.lineSpacing = 5;// 字体的行间距

    

    NSDictionary *attributes = @{

                                 NSFontAttributeName:textFont,

                                 NSParagraphStyleAttributeName:paragraphStyle

                                 };

    

    textView.attributedText = [[NSAttributedString alloc] initWithString:textView.text attributes:attributes];

    

    _textView.delegate=self;

    

    textView.backgroundColor=[UIColor redColor];

    

    [self.view addSubview:textView];

    

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textViewTextDidChange:) name:UITextViewTextDidChangeNotification object:textView];

}

 

/**

 *  设置输入超过三行(高度78)自动滚入不可见区域

 *

 *  @param notification <#notification description#>

 */

- (void)textViewTextDidChange:(NSNotification *)notification{

    

    if([_textView.text hasPrefix:@" "]){

        _textView.text=[_textView.text stringByReplacingOccurrencesOfString:@" " withString:@""];

    }

    

    CGFloat height = _textView.contentSize.height>78?78:_textView.contentSize.height;

    

    _textView.frame=CGRectMake(100, CGRectGetMaxY(_textView.frame)-height, _textView.frame.size.width, height);

    

    return;

}

 

 

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{

    _mark=YES;

}

 

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{

    _mark=NO;

 

}

 

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{

    /**

     *  判断是否拖动来设置frame

     */

    if(!self.isMark){

        NSLog(@"%lf",_textView.contentSize.height);

        if(_textView.contentSize.height>78){

            [_textView setContentOffset:CGPointMake(0, _textView.contentSize.height-78)];

        }else{

            [_textView setContentOffset:CGPointMake(0, 0)];

        }

    }

}

 

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

 

@end

以上是关于UITextView仿微信输入的主要内容,如果未能解决你的问题,请参考以下文章

自定义UITextView的placeholder(占位文字)

iOS UITextView自适应高度UITextContainerView抖动问题

iOS- UITextView与键盘回收与键盘遮挡输入框

UITextView 限制输入字数

UITextView限制输入文字

UITextView:输入退格键时字符数不正确