需要有关textField的帮助:shouldChangeCharactersInRange:replacementString:

时间:2013-07-19 06:01:04

标签: ios objective-c uitextfield uitextfielddelegate

UITextFieldDelegate Protocol Reference

“询问代表是否应更改指定的文本。”关于textField:shouldChangeCharactersInRange:replacementString:

我有UITextField且只有数字除外,我不希望0作为UITextField中的第一个数字,如果用户按0,如果它是第一个,则不能出现。

使用编辑已更改的事件可以实现此功能的目的是什么?

2 个答案:

答案 0 :(得分:2)

试试这个,

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSUInteger newLength = [textField.text length] + [string length] - range.length;

    if(newLength>1 && range.location==0 && [string isEqualToString:@"0"])
    {
        textField.text = [textField.text substringFromIndex:0];
        return NO;
    }
    else
        return (newLength == 1 && [string isEqualToString:@"0"]) ? NO : YES;

    return YES;  
}

答案 1 :(得分:1)

尝试使用这个......

   -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    /* for backspace */
    if([string length]==0)
    {
        return YES;
    }

    /*  limit to only numeric characters  */

    NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
    for (int i = 0; i < [string length]; i++)
    {
        if ([string isEqualToString:@"0"] && [textField.text length] == 0)
            return NO;
        else
        {
            unichar c = [string characterAtIndex:i];
            if ([myCharSet characterIsMember:c])
                return YES;
        }
    }
    return NO;
}

我希望这个答案会有所帮助......