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