Ios 如何限制数值设置?

Ios 如何限制数值设置?,ios,limit,appsettings,Ios,Limit,Appsettings,我在我的应用程序中有一个简单的设置,希望数值限制为10000。我在Root.plist中有一个条目,它是一个pstextfield说明符。我可以转换和限制输入的字符串,但如果用户输入1234567890,该文本仍保留在设置中,并且用户不知道我已对其进行了限制 当我需要在程序中使用该值时,我使用[defaults IntegerWorkey]进行转换 我已经花了一些时间来寻找解决方案,因为我没有找到答案,我想知道我是否使用了错误的方法。通过实现以下文本字段委托方法来限制用户可以在文本字段中输入的位

我在我的应用程序中有一个简单的设置,希望数值限制为10000。我在Root.plist中有一个条目,它是一个pstextfield说明符。我可以转换和限制输入的字符串,但如果用户输入1234567890,该文本仍保留在设置中,并且用户不知道我已对其进行了限制

当我需要在程序中使用该值时,我使用[defaults IntegerWorkey]进行转换


我已经花了一些时间来寻找解决方案,因为我没有找到答案,我想知道我是否使用了错误的方法。

通过实现以下文本字段委托方法来限制用户可以在文本字段中输入的位数:shouldChangeCharactersInRange

此方法是textfield的委托UITextFieldDelegate的一部分。 使视图控制器符合此协议,并实现以下功能:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    int val = [string intVal];
    if (val > 10000)
        return NO;

    return YES;
}

如果文本字段未设置为仅数值,则在转换为数字之前验证替换字符串

,当用户在设置应用程序中输入无效值时,您将无法提供即时反馈。但是,一旦应用程序激活,您可以重置该值。这将解决以下问题:

如果用户输入1234567890,则该文本仍保留在设置中,并且用户不知道我已对其进行了限制

例如:


您的问题需要更详细一点:用户输入的控件是什么?应用程序中的文本字段?还是一个设置包?迈克尔,对不起,我应该说得更清楚。它只是默认设置包中的一个设置。我对它的唯一引用是Settings.bundle中的Root.plist。我可以读出该值,我想我可以用正确的值替换它,但我不知道如何让代理为每个字符条目运行,因为我没有可用的UITextField。作为记录,我从最初的问题日期起一直在搜索该问题的答案,但仍然没有找到答案。您能帮我多一点忙吗乔拉什或其他任何人。我了解委托,并了解了如何将普通视图中的文本框链接到委托函数,但由于这来自设置,我不知道如何设置委托。在视图控制器的init方法中添加以下行:self.textField.delegate=self;假设textField是由视图控制器控制的UITextField,并确保控制器符合uitextfieldDelegate抱歉giorashc,关键是,据我所知,默认设置没有文本字段,因此我没有设置代理的对象textField。我只有Root.plist,其中包含设置应用程序从中创建文本字段的信息。也许我只需要找到如何访问它?我有点困惑。。。用户在哪里输入他的号码?你有文本字段控件吗?用户在设置中输入他的号码。这是一款在图标上有3个齿轮的苹果应用程序。我已将设置信息添加到Root.plist中,以便为我的应用程序显示我的设置。不,我没有文本字段控件。
NSInteger value = [[NSUserDefaults standardUserDefaults] integerForKey:@"my_key"];

if (value < 0 || value > 10000) {
    // invalid value

    value = 10000;

    // reset value shown in iOS settings app 
    [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInteger:value] forKey:@"my_key"]];
}

return value;