【问题标题】:Swift - How can I force users to import only integer in UITextField?Swift - 如何强制用户在 UITextField 中仅导入整数?
【发布时间】:2016-04-26 04:59:57
【问题描述】:

通常,在Text Field中,用户可以输入一个String,即使用户输入了一个数字,程序也会自动将其理解为一个字符串。

所以,这是我的问题。我想做一个程序来评估摩托车手的速度。

我有一个文本字段、一个文本视图和一个“开始”按钮。我要做的是应用 SWITCH - CASE 对用户在文本字段中输入的数字进行分类,然后我会将我的评价打印到文本视图中,例如“慢”、“够快”或“危险”快”。

但是在应用 switch - case 之前,我认为我必须强制用户仅在文本字段中输入整数。如果他们输入任何字母,文本视图将出现:“格式错误!请重试!”

我认为我必须对 if 语句做一些事情来解决问题,但事实是我刚刚开始学习 Swift,并且想不出任何可能的解决方案。请帮我。 谢谢。

【问题讨论】:

标签: ios iphone swift swift2 uitextfield


【解决方案1】:

如果您使用情节提要,只需选择 TextField 并将键盘类型更改为 NumberPad。这将只允许输入整数。然后,当您返回输入时,您可以将其转换为 Int。

   if let convertedSpeed = Int(textField.text) {
        // Implement whatever you want
   } else {
        // Notify user of incorrect input
   }

【讨论】:

  • 打败我,哈哈。类型转换是迄今为止最简单的方法。干得好:)
  • 键盘样式设置为 NumberPad 的事实并不能保证文本是 Int !!! 1. iPad上的“NumberPad”风格键盘不仅仅是数字。 2.您可以复制粘贴任何字符串到文本字段。
【解决方案2】:
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
    {
        if textField == Number_Txt // your text filed name
        {
            var result = true
            let prospectiveText = (textField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string)

            if string.characters.count > 0
            {
                let disallowedCharacterSet = NSCharacterSet(charactersInString: "0123456789").invertedSet
                let replacementStringIsLegal = string.rangeOfCharacterFromSet(disallowedCharacterSet) == nil

                let resultingStringLengthIsLegal = prospectiveText.characters.count > 0 

                let scanner = NSScanner(string: prospectiveText)
                let resultingTextIsNumeric = scanner.scanDecimal(nil) && scanner.atEnd

                result = replacementStringIsLegal && resultingStringLengthIsLegal && resultingTextIsNumeric
            }
            return result
        }
        else
        {
            return true
        }
    }

【讨论】:

  • 这太复杂了,基本上甚至不是OP所要求的。
【解决方案3】:

你可以通过两种方式解决它。

  1. 将键入的文本转换为整数值。

    Int(textfield.text!)

  2. 这个非常简单。选择键盘类型为数字/数字和标点符号。因此,用户只能输入号码。

希望对你有帮助..

【讨论】:

    【解决方案4】:

    您可以在情节提要中的属性检查器下指定文本字段的键盘类型。 “十进制”将是适合您的方式(假设可能的输入可以是例如 180.5)

    要继续,您仍然可以像这样检查输入:

    if (Int(textfield.text!) != nil ) {
         //Valid number, do stuff
    } else {
        textfield.text = "Wrong format! Please try again!"
    }
    

    编辑:

    ' != nil ' 表示如下:

    Int 的初始化器是失败的。这意味着如果您传递一个不包含有效数字的字符串,它将返回 nil(如果您来自 java/c#,则返回 null)。但是如果字符串确实包含一个有效数字,它将返回一个有效的 Int,因此它不是 nil。我希望这能让你明白;)

    【讨论】:

    • 谢谢。文本“格式错误!请重试!”确实有效!但是你能解释一下 != nil 的含义吗?
    • 已编辑以匹配您的其他问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多