【问题标题】:Set range of numerical values for a text field设置文本字段的数值范围
【发布时间】:2013-07-18 09:28:13
【问题描述】:

我有一个文本字段,它必须只取特定范围的数值,比如 m 到 n。我浏览了很多文章,但他们都只是说如何设置文本字段的最大长度。但我需要设置文本字段,使其仅采用范围的值,例如 23 到 103。我设法通过将键盘类型设置为数字键盘来确保文本字段仅采用数值。有人请帮忙。

【问题讨论】:

  • 我正在尝试开发一个 iOS 应用。
  • 如果您想将最小值设置为 23,那么当文本字段上的类型 2 表示您的期望时会发生什么?
  • 好的..你说得对。但我非常需要设置一个更高的限制。离开下限。
  • 您也可以在textField:shouldChangeCharactersInRange:replacementString: 中执行此操作。只需将您的输入限制为数字 0 到 9,并为“最多 103 个”的内容添加额外的逻辑。使用数字键盘也不会限制任何输入。您仍然可以复制和粘贴或使用外接键盘。
  • @Amar 不。这既不是关于 Interface Builder 也不是 Xcode 的问题。

标签: ios objective-c uitextfield


【解决方案1】:

您通常通过使用具有最小/最大可接受值的自定义数字格式化程序来实现这一点,如下所示:

NSNumberFormatter* formatter= [[NSNumberFormatter alloc]init];
formatter.numberStyle= NSNumberFormatterDecimalStyle;
formatter.allowsFloats= NO;
formatter.maximum= @103;
formatter.minimum= @23;

然后仅当格式化程序返回有效数字时才允许用户返回:

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{ 
    return [formatter numberFromString: textField.text]!= nil;
}

【讨论】:

    【解决方案2】:

    您可以在用户完成编辑文本字段时检查该值。

    将 textField 的委托设置为您的视图控制器,然后:

    - (BOOL)textFieldShouldReturn:(UITextField *)textField
    {
        NSString *stringValue = textField.text;
        NSInteger integer = [stringValue intValue];
        if (integer <23 || integer > 103)
            // You can make the text red here for example
            return NO;
        else 
            return YES;
    }
    

    【讨论】:

    • 谢谢,但我需要的是,如果上限是103,那么用户一定不能输入104。
    • 这就是我在 textFieldShouldEndEditing 中返回 NO 的原因。在输入有效值之前,他无法停止编辑文本字段。
    • 嗯,我认为逻辑应该在 textField:shouldChangeCharactersInRange:replacementString: method.
    【解决方案3】:

    试试这个。 如果您想为特定文本字段设置范围。

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    

    {

    if(textField == self.txtMobileNumber )
    {
        if (textField.text.length >= 10 && range.length == 0)
            return NO;
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-25
      • 2021-08-31
      • 2013-10-13
      • 1970-01-01
      • 2023-02-23
      • 2020-09-02
      • 2012-03-26
      • 1970-01-01
      相关资源
      最近更新 更多