UITextField用戶輸入限制(例子為金額方面)

1.簡述

最近忙著做一個賬單管理APP物延,在添加賬單的界面中,有一個輸入金額的UITextField昭雌。
要求:每筆賬單的收入或支出金額不超過9位數(shù)蜒蕾,小數(shù)點后保留兩位小數(shù)兰绣。

2.使用的方法

UITextFieldDelegate 中的
- (BOOL)textField:(UITextField*)textField
        shouldChangeCharactersInRange:(NSRange)range
        replacementString:(NSString*)string;
用戶每輸入一個字符就會調用該方法膘螟,點擊鍵盤的刪除按鈕也會調用虽惭。
參數(shù)解析:
2.1 textField
在該方法內敌蚜,我們可以使用
[textField isEqual:self.billAmountTextField];
來判斷用戶是否在相應的TextField中輸入字符候衍。

2.2 NSRange是一個結構體
它有兩個NSUInteger類型的屬性笼蛛,一個是length,一個是location
我們可以使用range.location來訪問用戶輸入的字符在整個textField.text字符串中的位置蛉鹿,
位置的編號從零開始滨砍,也就是說:
當用戶在UITextField中輸入第一個字符后,range.location的值為0,以此類推;

2.3 string
string就是用戶“一次”輸入的字符或者字符串,而不是當前UITextField中所包含的所有字符妖异,
它不會對多次輸入的字符進行拼接惋戏。
比如用戶第一次輸入了“我吃了”,第二次輸入了“晚飯”他膳。
那么string的內容分別是“我吃了”和“晚飯”响逢,而不是“我吃了”和“我吃了晚飯”。

3.代碼

#define NumbersWithDot     @"0123456789.\n"
#define NumbersWithoutDot  @"0123456789\n"

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    // 判斷是否輸入內容棕孙,或者用戶點擊的是鍵盤的刪除按鈕
    if (![string isEqualToString:@""]) {
        NSCharacterSet *cs;
        if ([textField isEqual:self.billAmountTextField]) {
            // 小數(shù)點在字符串中的位置 第一個數(shù)字從0位置開始
            NSInteger dotLocation = [textField.text rangeOfString:@"."].location;
        
            // 判斷字符串中是否有小數(shù)點舔亭,并且小數(shù)點不在第一位
            // NSNotFound 表示請求操作的某個內容或者item沒有發(fā)現(xiàn),或者不存在
            // range.location 表示的是當前輸入的內容在整個字符串中的位置蟀俊,位置編號從0開始
            if (dotLocation == NSNotFound && range.location != 0) {
            
                // 取只包含“myDotNumbers”中包含的內容分歇,其余內容都被去掉
                /*
                 [NSCharacterSet characterSetWithCharactersInString:myDotNumbers]的作用是去掉"myDotNumbers"中包含的所有內容,只要字符串中有內容與"myDotNumbers"中的部分內容相同都會被舍去
             
                 在上述方法的末尾加上invertedSet就會使作用顛倒欧漱,只取與“myDotNumbers”中內容相同的字符
                 */
                cs = [[NSCharacterSet characterSetWithCharactersInString:NumbersWithDot] invertedSet];
                if (range.location >= 9) {
                    NSLog(@"單筆金額不能超過億位");
                    if ([string isEqualToString:@"."] && range.location == 9) {
                        return YES;
                    }
                
                    return NO;
                }
            }else {
                cs = [[NSCharacterSet characterSetWithCharactersInString:NumbersWithoutDot] invertedSet];
            }
        
            // 按cs分離出數(shù)組,數(shù)組按@""分離出字符串
            NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
            BOOL basicTest = [string isEqualToString:filtered];
            if (!basicTest) {
                NSLog(@"只能輸入數(shù)字和小數(shù)點");
                return NO;
            }
        
            if (dotLocation != NSNotFound && range.location > dotLocation + 2) {
                NSLog(@"小數(shù)點后最多兩位");
                return NO;
            }
        
            if (textField.text.length > 11) {
                return NO;
            }
        }
    }

    return YES;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市葬燎,隨后出現(xiàn)的幾起案子误甚,更是在濱河造成了極大的恐慌缚甩,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窑邦,死亡現(xiàn)場離奇詭異擅威,居然都是意外死亡,警方通過查閱死者的電腦和手機冈钦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門郊丛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瞧筛,你說我怎么就攤上這事厉熟。” “怎么了较幌?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵揍瑟,是天一觀的道長。 經常有香客問我乍炉,道長绢片,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任岛琼,我火速辦了婚禮底循,結果婚禮上,老公的妹妹穿的比我還像新娘槐瑞。我一直安慰自己熙涤,他們只是感情好,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布随珠。 她就那樣靜靜地躺著灭袁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪窗看。 梳的紋絲不亂的頭發(fā)上茸歧,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音显沈,去河邊找鬼软瞎。 笑死,一個胖子當著我的面吹牛拉讯,可吹牛的內容都是我干的涤浇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼魔慷,長吁一口氣:“原來是場噩夢啊……” “哼只锭!你這毒婦竟也來了?” 一聲冷哼從身側響起院尔,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蜻展,失蹤者是張志新(化名)和其女友劉穎喉誊,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纵顾,經...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡伍茄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了施逾。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敷矫。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖汉额,靈堂內的尸體忽然破棺而出曹仗,到底是詐尸還是另有隱情,我是刑警寧澤闷愤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布整葡,位于F島的核電站,受9級特大地震影響讥脐,放射性物質發(fā)生泄漏遭居。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一旬渠、第九天 我趴在偏房一處隱蔽的房頂上張望俱萍。 院中可真熱鬧,春花似錦告丢、人聲如沸枪蘑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽岳颇。三九已至,卻和暖如春颅湘,著一層夾襖步出監(jiān)牢的瞬間话侧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工闯参, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瞻鹏,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓鹿寨,卻偏偏與公主長得像新博,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子脚草,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,127評論 25 707
  • 1. Java基礎部分 基礎部分的順序:基本語法赫悄,類相關的語法,內部類的語法,繼承相關的語法涩蜘,異常的語法嚼贡,線程的語...
    子非魚_t_閱讀 31,631評論 18 399
  • 讓我再看你一遍 從南到北 你好 !再見同诫!
    今天是周二閱讀 186評論 0 0
  • 木棉花(kapok)是南方的特產,是廣州市樟澜、高雄市以及攀枝花市的市花误窖。花掉落后秩贰,樹下落英紛陳霹俺,花不褪色、不萎靡毒费,很...
    五月成長筆記閱讀 479評論 0 1
  • 1. 最近頻頻見賈靜雯觅玻、修杰楷夫妻倆公開大秀家庭的幸福想际,這讓一大波的粉絲在羨慕嫉妒的同時,更多的是大呼“好甜蜜”溪厘。...
    七夢的悠閑時光閱讀 2,009評論 4 16