UITextField基本設(shè)置
實(shí)現(xiàn)其代理的方法
注:a、textField當(dāng)前正在輸入的文本框,text文本是當(dāng)前輸入的文本框的上一次輸入結(jié)束時(shí)的文本
b、range 的location是textField的最后一個(gè)字符位置,既extField.text的(length),range 的length一直是0
c、string是當(dāng)前輸入的字符
NSString * toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string];
在輸入前的文本內(nèi)容textField.text最后加上當(dāng)前輸入的字符string,得到當(dāng)前文本框的內(nèi)容
#pragma mark - textField delegate
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
{
NSString * toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string]; //得到輸入框的內(nèi)容
NSLog(@"rang: from %ld? to %ld ",range.location, range.length);
if (self.ipTextField == textField)? //判斷是否時(shí)我們想要限定的那個(gè)輸入框
{
if ([toBeString length] > 15) { //如果輸入框內(nèi)容大于15則彈出警告
NSLog(@"ipTextField 超過最大數(shù)");
return NO;
}
}
if (self.roomNumTextField == textField) {
if ([toBeString length] == 4) {
self.ipTextField.text = [self buildIPStringWithString:toBeString];
}
if ([toBeString length] > 4) { //如果輸入框內(nèi)容大于3則彈出警告
NSLog(@"roomNumTextField 超過最大數(shù)");
return NO;
}
}
return YES;
}
附帶檢測字符串是否符合ip地址規(guī)范
//檢查ip地址是否符合規(guī)范
- (BOOL)isIPAddressWithString:(NSString *)string{
if (string.length > 15) {
return false;
}
NSInteger from = 0; //記錄截取的初始位置
NSInteger cutCount = 0; //記錄截取次數(shù)
NSInteger length = string.length;
//? ? NSInteger to? = 0; //截取長度i-from+1
for (NSInteger i = 0; i < length; i++) {
unichar charactor = [string characterAtIndex:i];
//判斷字符規(guī)范
if ( !((charactor>= 48 && charactor<=57) || charactor==46) ) {
return false;
}
//截取,判讀是否在ip地址范圍
if ((charactor==46) || (i==length-1)) {
NSInteger tempInt = [[string substringWithRange:NSMakeRange(from, (i-from+1))] integerValue];
//NSLog(@"%ld", tempInt);
if (!(tempInt >= 0 && tempInt <= 255)) {
return false;
}
from = i+1;
cutCount++;
}
}
//判斷截取次數(shù)是否滿足
if (cutCount != 4) {
return false;
}
//通過所有檢測
return true;
}