iOS設(shè)置鍵盤輸入限制,符號(hào)表情及內(nèi)容長度限制

因?yàn)轫?xiàng)目需要對(duì)鍵盤輸入內(nèi)容有所限制,所以弄了個(gè)UITextField的父類,做了以下處理。

@property (nonatomic, assign) NSInteger textLocation;//聲明一個(gè)全局屬性,用來記錄輸入位置

[self addTarget:self action:@selector(textFieldDidChanged:) forControlEvents:UIControlEventEditingChanged];

- (void)textFieldDidChanged:(UITextField *)textField {
     NSString *primaryLanguage = textField.textInputMode.primaryLanguage; // 鍵盤輸入模式
    if ([primaryLanguage isEqualToString:@"zh-Hans"]) { // 簡(jiǎn)體中文輸入,包括簡(jiǎn)體拼音,健體五筆,簡(jiǎn)體手寫
        //字符處理
        if (textField.text.length > self.maxLength) {
            NSRange range;
            NSUInteger inputLength = 0;
            for (int i = 0; i < textField.text.length && inputLength <= self.maxLength; i += range.length) {
                
                range = [textField.text rangeOfComposedCharacterSequenceAtIndex:i];
                inputLength += [textField.text substringWithRange:range].length;
                if (inputLength > self.maxLength) {
                    
                    NSString *newText = [textField.text substringWithRange:NSMakeRange(0, range.location)];
                    textField.text = newText;
                }
            }
        }else {
            if (!self.isBeginEditing) {
                
                if (self.textLocation != -1) {
                    
                    textField.text = [textField.text substringToIndex:self.textLocation];
                }
            }
        } 
    }
}
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    
    if (self.isRestrictionEmoji) {
        
        if (![self isNineKeyBoard:string]) {
            
            self.isBeginEditing = NO;

            if ([NSString stringContainsEmoji:string]) {
                
                self.textLocation = range.location;
            }else {
                
                self.textLocation = -1;
            }
        }
    }
    return YES;
}

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {

    self.isBeginEditing = YES;
    
    return YES;
}

-(BOOL)isNineKeyBoard:(NSString *)string {
    
    NSString *other = @"????????";
    int len = (int)string.length;
    for(int i = 0;i < len;i++) {
        
        if(!([other rangeOfString:string].location != NSNotFound)){
            return NO;
        }
    }
    return YES;
}

我在開發(fā)中,最初發(fā)現(xiàn)系統(tǒng)的中文九宮格鍵盤是無法輸入,所以在textFieldShouldBeginEditing里面添加了一個(gè)屬性,讓這個(gè)屬性可以來判斷鍵盤第一次輸入的內(nèi)容是否為初始的聯(lián)想內(nèi)容,因?yàn)樽铋_始的聯(lián)想內(nèi)容是不觸發(fā)shouldChangeCharactersInRange事件的,但是textFieldDidChanged方法卻做了判斷,這可能會(huì)讓文字內(nèi)容輸入無效。所以添加這么一個(gè)屬性,來判定是否為最開始的聯(lián)想輸入。目前測(cè)試幾個(gè)鍵盤交換輸入是沒有問題的。

如果發(fā)現(xiàn)還有什么問題,歡迎私聊于我,如果有更好的辦法也希望能寫出來,大家互相學(xué)習(xí)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容