iOS TextView輸入長度限制 設置placeholder

textView在使用中一般會有2個功能是最經常使用的html

  1. 設置placeholder
  2. 限制輸入長度

TYLimitedTextView恰好是爲了解決這個2個問題而誕生的,下面講解TYLimitedTextView的用法,有須要的能夠參考(textField限制輸入請參考個人文章iOS textField輸入限制),demo下載地址:https://github.com/qqcc1388/TYLimitInputDemogit

TYLimitedTextView可以快速實現功能github

  1. placeholoder功能實現
  2. textview輸入長度實時監聽,控制
  3. 提供代理方法實現textview return事件回調

話很少說,上代碼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

相關文章
相關標籤/搜索