天天看點

iOS開發_限制UITextView的最大字數

同時适用于UITextField

1.屬性

//自定義的textview
@property (weak, nonatomic) IBOutlet UITextView *textview;

//添加一個bool類型的屬性
@property (nonatomic, assign) BOOL isNameTextFieldEnbable;
           

二、監聽通知、并初始化BOOL值

//UITextView的監聽方法
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textchange:) name:UITextViewTextDidChangeNotification object:nil];

//初始化為YES,讓textView開始輸入有反應
self.isNameTextFieldEnbable = YES;
           

三、監聽方法

/** 監聽方法 */
-(void)textchange:(NSNotification *)note{

    //最大字數
    static const NSInteger Max_Num_TextView = 5;

    //監聽開始預設YES
    self.isNameTextFieldEnbable = YES;

    //目前輸入語言狀态
    UITextInputMode *mode = (UITextInputMode *)[UITextInputMode activeInputModes][0];
    NSString *lang = mode.primaryLanguage;

    //漢字
    if ([lang isEqualToString:@"zh-Hans"]) {
        UITextRange *selectedRange = [self.textview markedTextRange];
        //高亮狀态的start位置
        UITextPosition *position = [self.textview positionFromPosition:selectedRange.start offset:0];

        //沒有高亮狀态,即每次截取要在文字确認之後
        if (!position) {

            if (self.textview.text.length > Max_Num_TextView) {
                self.textview.text = [self.textview.text substringToIndex:Max_Num_TextView];
                self.isNameTextFieldEnbable = NO;
            }
        }
    }
    //非漢字狀态
    else{
        if (self.textview.text.length > Max_Num_TextView) {
            self.textview.text = [self.textview.text substringToIndex:Max_Num_TextView];
            self.isNameTextFieldEnbable = NO;
        }
    }
}
           

四、TextView的代理方法

//是否允許鍵盤輸入
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{

    //傳回删除鍵
    if ([text isEqualToString:@""]) {

        return YES;

    }else{

        return _isNameTextFieldEnbable;
    }
}
           

五、效果圖

iOS開發_限制UITextView的最大字數

繼續閱讀