如何在UITextField中禁用字母字符?

Ale*_*nko 9 iphone objective-c uitextfield uikit ipad

在我的应用程序中,我需要允许用户只输入数字.如何让UITextField只接收来自用户的号码?

Wri*_*sCS 32

允许使用此示例中的字符,因此如果您不希望用户使用字符,请将其排除myCharSet.

- (BOOL)textField:(UITextField *)theTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{
    NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
    for (int i = 0; i < [string length]; i++) {
        unichar c = [string characterAtIndex:i];
        if (![myCharSet characterIsMember:c]) {
            return NO;
        }
    }

    return YES;
} 
Run Code Online (Sandbox Code Playgroud)

  • 该方法总是返回NO,最后应该是YES.当然会更改if(![myCharSet characterIsMember:c]){.. to if([myCharSet characterIsMember:c]){ (4认同)

zir*_*isp 5

我更喜欢以下解决方案,除了数字和退格之外,它实际上阻止了任何输入.退格由于某种原因由空字符串表示,除非空字符串返回YES,否则无法使用退格键.当用户输入其他数字字符时,我还会弹出警报视图.

- (BOOL)textField:(UITextField *)theTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{
    if (string.length == 0) {
        return YES;
    }
    NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
    for (int i = 0; i < [string length]; i++) {
        unichar c = [string characterAtIndex:i];
        if ([myCharSet characterIsMember:c]) {
            return YES;
        }
    }
    UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"Invalid Input" message:@"Only numbers are allowed for participant number." delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
    [av show];
    return NO;
}
Run Code Online (Sandbox Code Playgroud)