- (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)我。