UITextField的一些基础用法

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;
}

你可能感兴趣的:(UITextField的一些基础用法)