UITextFieldDelegate 方法詳解

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSLog(@"text = %@", textField.text);
    NSLog(@"string = %@", string);
    NSLog(@"range = %@", NSStringFromRange(range));
 }
 
// 輸入時(shí)間的數(shù)據(jù)
2016-10-27 13:52:41.983 測(cè)試[1670:383188] text = 
2016-10-27 13:52:41.984 測(cè)試[1670:383188] string = Q
2016-10-27 13:52:41.985 測(cè)試[1670:383188] range = {0, 0}
2016-10-27 13:53:08.784 測(cè)試[1670:383188] text = Q
2016-10-27 13:53:08.785 測(cè)試[1670:383188] string = w
2016-10-27 13:53:08.785 測(cè)試[1670:383188] range = {1, 0}
2016-10-27 13:53:15.386 測(cè)試[1670:383188] text = Qw
2016-10-27 13:53:15.386 測(cè)試[1670:383188] string = e
2016-10-27 13:53:15.387 測(cè)試[1670:383188] range = {2, 0}

// 刪除時(shí)間的數(shù)據(jù)
2016-10-27 14:14:49.446 測(cè)試[1670:383188] text = Qwe
2016-10-27 14:14:49.447 測(cè)試[1670:383188] string = 
2016-10-27 14:14:49.447 測(cè)試[1670:383188] range = {2, 1}
2016-10-27 14:14:49.712 測(cè)試[1670:383188] text = Qw
2016-10-27 14:14:49.712 測(cè)試[1670:383188] string = 
2016-10-27 14:14:49.713 測(cè)試[1670:383188] range = {1, 1}
2016-10-27 14:14:50.762 測(cè)試[1670:383188] text = Q
2016-10-27 14:14:50.762 測(cè)試[1670:383188] string = 
2016-10-27 14:14:50.763 測(cè)試[1670:383188] range = {0, 1}

相信通過(guò)數(shù)據(jù)大家都會(huì)知道其中的規(guī)律。
接下來(lái)我們實(shí)現(xiàn)一個(gè)文本框只能輸入0-9,其他的字符限制不讓輸入,并且首字母不能輸入0。那肯定有人會(huì)說(shuō),直接使用數(shù)字幾盤(pán)就完事了,簡(jiǎn)單方便。但是如果有小數(shù)點(diǎn)的輸入呢?ios 并沒(méi)有提供這樣的鍵盤(pán)。怎么辦, 要么使用其他的鍵盤(pán),要么自定義鍵盤(pán)。用其他的鍵盤(pán)就涉及到了文本限制輸入了。
靠,說(shuō)了一大堆廢話,我們來(lái)開(kāi)始干點(diǎn)正事吧。。??

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSLog(@"string = %@", string);
    NSLog(@"range = %@", NSStringFromRange(range));
    if (string.length > 0) { // 表示輸入
        unichar single = [string characterAtIndex:0];//當(dāng)前輸入的字符
        if ((single >= '0' && single <= '9')) {//數(shù)據(jù)格式正確
            //首字母不能為0和小數(shù)點(diǎn)
            if(textField.text.length == 0) {
                if (single == '0') { // 第一個(gè)數(shù)字不能為0
                    [textField.text stringByReplacingCharactersInRange:range withString:@""];
                    return NO;
                }
            }
        } else {//輸入的數(shù)據(jù)格式不正確
            [textField.text stringByReplacingCharactersInRange:range withString:@""];
            return NO;
        }
    } else { // 表示刪除
        return YES;
    }
    return YES; 
    }

此時(shí)運(yùn)行程序, 你就會(huì)驚喜的發(fā)現(xiàn)咱們想要的效果了。
又不懂的地方可以第一時(shí)間問(wèn)我。

最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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