在使用UITextField時,可能會需要限定UITextField的輸入內容,此時需要在以下方法中 進行相關設置
1、限制輸入字符類型
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSCharacterSet *cs;
//invertedSet方法是去反字符,把所有的除了NUMBERS 里的字符都找出來(包含去空格功能)
cs = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS]invertedSet];
// componentsJoinedByString 用于根據一個字符串來將數組連接成一個新的字符串。
NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs]componentsJoinedByString:@""]; //按cs分離出數組,數組按@""分離出字符串
BOOL canChange = [string isEqualToString:filtered];
return canChange;
//這樣寫了以后,輸入非數字時不能輸入
}
//上面那個NUMBERS是一個宏,可以在文件頂部定義:
#define NUMBERS @”0123456789n”
//這個代表可以輸入數字和換行,請注意這個n,如果不寫這個,Done按鍵將不會觸發(fā),如果用在SearchBar中,將會不觸發(fā)Search事件,因為你自己限制不讓輸入n,好慘,我在項目中才發(fā)現(xiàn)的。
//所以,如果你要限制輸入英文和數字的話,就可以把這個定義為:
#define kAlphaNum @”ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789″
//當然,你還可以在以上方法return之前,做一提示的,比如提示用戶只能輸入數字之類的。如果你覺得有需要的話。
2、限制只能輸入一定長度的字符
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
{
//string就是此時輸入的那個字符 textField就是此時正在輸入的那個輸入框 返回YES就是可以改變輸入框的值 NO相反
if ([string isEqualToString:@"n"]) //按回車可以改變 //這里這個字符寫什么,就只能輸入什么
{
return YES;
}
NSString *toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string]; //得到輸入框的內容
if (self.myTextField == textField) //判斷是否是我們想要限定的那個輸入框
{
if ([toBeString length] > 20) { //如果輸入框內容大于20則彈出警告
textField.text = [toBeString substringToIndex:20];
UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:nil message:@"超過最大字數不能輸入了" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil] autorelease]; //iOS8.3以后用
UIAlertController
[alert show];
/*
UIAlertController *alertView = [UIAlertController alertControllerWithTitle:@"提示"message:@"超過最大字數不能輸入了"preferredStyle:UIAlertControllerStyleActionSheet];
[selfpresentViewController:alertViewanimated:YEScompletion:nil];
*/
return NO;
}
}
return YES;
}