我的应用程序中有一个简单的设置,并希望数值限制为10,000。我在Root.plist中有条目,它是一个PSTextFieldSpecifier。我可以转换并限制输入的字符串,但如果用户输入1234567890,则该文本仍保留在设置中且用户不知道我已限制它。
我需要在程序中使用该值时使用[defaults integerForKey]进行转换。
我花了一些时间寻找解决方案,因为我没有找到答案,不知道我是否使用了错误的方法。
答案 0 :(得分:0)
通过实施以下文本字段委托方法限制用户可以在文本字段中输入的位数:shouldChangeCharactersInRange
。
此方法是文本字段委托UITextFieldDelegate
的一部分。
使视图控制器符合此协议并按如下方式实现该功能:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
int val = [string intVal];
if (val > 10000)
return NO;
return YES;
}
如果文本字段未设置为仅数字而不是在转换为数字之前验证替换字符串
答案 1 :(得分:0)
当用户在设置应用中输入无效值时,您将无法提供即时反馈。但是,您可以在应用激活后重置该值。即这将解决问题
如果用户输入1234567890,该文本仍保留在设置中且用户不知道我限制了它
例如:
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;