1. 通知
UITextField派生自UIControl,所以UIControl类中的通知系统在文本字段中也可以使用。
除了UIControl类的标准事件,你还可以使用下列UITextField类特有的事件:
UITextFieldTextDidBeginEditingNotification
UITextFieldTextDidChangeNotification
UITextFieldTextDidEndEditingNotification
当文本字段退出编辑模式时触发,通知的object属性存储了最终文本。
因为文本字段要使用键盘输入文字,所以下面这些事件发生时,也会发送动作通知
UIKeyboardWillShowNotification // 键盘显示之前发送
UIKeyboardDidShowNotification // 键盘显示之后发送
UIKeyboardWillHideNotification // 键盘隐藏之前发送
UIKeyboardDidHideNotification // 键盘隐藏之后发送
2. 限制只能输入特定的字符
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *limitStr = @"0123456789\n";
NSCharacterSet *characterSet= [[NSCharacterSet characterSetWithCharactersInString:limitStr] invertedSet];
NSString *filtered = [[string componentsSeparatedByCharactersInSet:characterSet] componentsJoinedByString:@""];
BOOL canChange = [string isEqualToString:filtered];
return canChange;
}
”0123456789\n” (代表可以输入数字和换行,请注意这个\n,如果不写这个,Done按键将不会触发.如果用在SearchBar中,将会不触发Search事件,因为你自己限制不让输入\n。)
当然,你还可以在以上方法return之前,提示用户只能输入数字。
3. 限制只能输入一定长度的字符
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
{
// string为此时输入的那个字符
// 返回YES就是可以改变输入框的值,NO相反
if ([string isEqualToString:@"\n"]) {
return YES;
}
NSString * toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string];
// 如果输入框内容大于20则弹出警告
if ([toBeString length] > 20) {
textField.text = [toBeString substringToIndex:20];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"最多不能超过20字" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
return NO;
}
return YES;
}