textView在使用中通常會有2個功能是最常用的
- 設置placeholder
- 限制輸入長度
TYLimitedTextView剛好是為了解決這個2個問題而誕生的,下面講解TYLimitedTextView的用法,有需要的可以參考(textField限制輸入請參考我的文章iOS textField輸入限制),demo下載地址:https://github.com/qqcc1388/TYLimitInputDemo
TYLimitedTextView能夠快速實現功能
- placeholoder功能實現
- textview輸入長度實時監聽,控制
- 提供代理方法實現textview return事件回調
話不多說,上代碼
#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
使用方法:
//設置允許輸入的最大長度
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 的尷尬。如果拓展出來的方法不足以你使用,自己自行拓展。
轉載請標注來源https://www.cnblogs.com/qqcc1388/p/7251946.html