textView在使用中一般会有2个功能是最经常使用的html
TYLimitedTextView恰好是为了解决这个2个问题而诞生的,下面讲解TYLimitedTextView的用法,有须要的能够参考(textField限制输入请参考个人文章iOS textField输入限制),demo下载地址:https://github.com/qqcc1388/TYLimitInputDemogit
TYLimitedTextView可以快速实现功能github
话很少说,上代码atom
#import <UIKit/UIKit.h> @protocol TYLimitedTextViewDelegate <NSObject> @optional /** textView 键盘return事件监听 @param textView textView */ -(BOOL)limitedTextViewShouldReturn:(UITextView *)textView; /** textView内容改变实时监听 @param textView textView */ - (void)limitedTextViewDidChange:(UITextView *)textView; /** textView end editing @param textView textView */ - (void)limitedTextViewDidEndEditing:(UITextView *)textView; @end @interface TYLimitedTextView : UITextView @property (nonatomic,weak) id <TYLimitedTextViewDelegate> realDelegate; /** TYLimitedTextView容许输入的最大长度 默认 0不限制 */ @property (nonatomic,assign) NSInteger maxLength; /** 输入内容长度 */ @property (nonatomic,assign) NSInteger inputLength; @end
#import "TYLimitedTextView.h" @interface TYLimitedTextView ()<UITextViewDelegate> @end @implementation TYLimitedTextView -(instancetype)initWithFrame:(CGRect)frame{ if (self = [super initWithFrame:frame]) { [self initialize]; } return self; } -(instancetype)initWithCoder:(NSCoder *)aDecoder{ if (self = [super initWithCoder:aDecoder]) { [self initialize]; } return self; } -(void)initialize{ //设置默认值 self.maxLength = 0; //设置基本属性 self.textColor = [UIColor colorWithRed:51/255.0 green:51/255.0 blue:51/255.0 alpha:1.0]; self.font = [UIFont systemFontOfSize:14]; self.backgroundColor = [UIColor whiteColor]; //设置代理 self.delegate = self; } #pragma mark - textViewDelegate - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{ //若是用户点击了return if([text isEqualToString:@"\n"]){ if (_realDelegate && [_realDelegate respondsToSelector:@selector(limitedTextViewShouldReturn:)]) { return [_realDelegate limitedTextViewShouldReturn:textView]; } return NO; } //长度限制操做 NSString *str = [NSString stringWithFormat:@"%@%@", textView.text, text]; if (str.length > self.maxLength && self.maxLength){ NSRange rangeIndex = [str rangeOfComposedCharacterSequenceAtIndex:self.maxLength]; if (rangeIndex.length == 1){//字数超限 textView.text = [str substringToIndex:self.maxLength]; //记录输入的字数 self.inputLength = textView.text.length; if (_realDelegate && [_realDelegate respondsToSelector:@selector(limitedTextViewDidChange:)]) { [_realDelegate limitedTextViewDidChange:textView]; } }else{ NSRange rangeRange = [str rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, self.maxLength)]; textView.text = [str substringWithRange:rangeRange]; } return NO; } return YES; } - (void)textViewDidChange:(UITextView *)textView{ if (textView.text.length > self.maxLength && self.maxLength){ textView.text = [textView.text substringToIndex:self.maxLength]; } //记录输入的字数 self.inputLength = textView.text.length; if (_realDelegate && [_realDelegate respondsToSelector:@selector(limitedTextViewDidChange:)]) { [_realDelegate limitedTextViewDidChange:textView]; } } - (void)textViewDidEndEditing:(UITextView *)textView{ if (_realDelegate && [_realDelegate respondsToSelector:@selector(limitedTextViewDidEndEditing:)]) { [_realDelegate limitedTextViewDidEndEditing:textView]; } }
关于textView实现placeholder功能,这里经过UITextView+Placeholder分类来实现具体代码见demo代理
使用方法:code
//设置容许输入的最大长度 self.textView.maxLength = 200; //设置代理方法 self.textView.realDelegate = self; self.textView.backgroundColor = [UIColor cyanColor]; //设置placeholder self.textView.placeholder = @"请填写用户用户简介";
使用TYLimitedTextView必定要注意:TYLimitedTextView已经将系统的TextView部分代理方法拓展出来了,全部若是你须要使用TYLimitedTextView回调功能,请不要使用delegate而使用realDelegate,不然会出现冲突也就是self.delegate = self 的尴尬。若是拓展出来的方法不足以你使用,本身自行拓展。orm
转载请标注来源https://www.cnblogs.com/qqcc1388/p/7251946.htmlhtm