1

我正在制作一个应用程序,我希望当用户输入任何数据时,无论用户输入什么,就像他输入 a 这样它不会接受这个输入并且在文本字段中不显示任何内容,如果它输入任何数字那么它应该接受。

4

5 回答 5

4

以下代码应该可以帮助您,这将不允许在您的文本字段中输入除数字以外的任何其他文本。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    static NSCharacterSet *charSet = nil;
    if(!charSet) {
    charSet = [[[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet] retain];
    }
    NSRange strLocation = [string rangeOfCharacterFromSet:charSet];
    return (strLocation.location == NSNotFound);
}
于 2013-03-13T08:47:54.223 回答
2

为什么你这样做更好给键盘样式

[txtField setKeyboardType:UIKeyboardTypeNumberPad]

或者你可以以编程方式进行:

NSString *nameRegex = @"[0-9]*";
NSPredicate *nameTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", nameRegex];
BOOL value = [nameTest evaluateWithObject:string];
if(value == YES)
    {
 // Do Somethings
    }
    else 
        {

    // Do something
    }
于 2013-03-13T08:31:46.890 回答
0

您需要将 Textfield 的键盘类型设置为 Numberpad。

使用代码试试这个:(你也可以在 XIB 属性上使用界面生成器进行设置)

[txtFieldObj setKeyboardType:UIKeyboardTypeNumberPad];
于 2013-03-13T08:32:00.850 回答
0
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (textField.tag==3)
{
    NSUInteger lengthOfString = string.length;
    for (NSInteger loopIndex = 0; loopIndex < lengthOfString; loopIndex++)
    {
        unichar character = [string characterAtIndex:loopIndex];
        if (character < 46 || character==47)
            return NO;
        if (character > 57)
            return NO;
    }
}

将标签设置为您的文本字段。

于 2013-03-13T08:38:36.257 回答
0
 NSUInteger lengthOfString = string.length;
    for (NSInteger loopIndex = 0; loopIndex < lengthOfString; loopIndex++) {
        unichar character = [string characterAtIndex:loopIndex];
        if (character < 48) return NO; // 48 unichar for 0
        if (character > 57) return NO; // 57 unichar for 9
    }

这是应该写在文本字段中的代码应该在范围内更改字符

于 2013-03-13T09:58:12.823 回答