簡體   English   中英

Swift-如何強制用戶在UITextField中僅導入整數?

[英]Swift - How can I force users to import only integer in UITextField?

通常,在“文本字段”中,用戶可以輸入字符串,即使用戶輸入了數字,程序也會自動將其理解為字符串。

所以,這是我的問題。 我想編寫一個評估電單車司機速度的程序。

我有一個文本字段,一個文本視圖和一個“開始”按鈕。 我想要做的是應用SWITCH-CASE對用戶在文本字段中輸入的數字進行分類,然后將對文本視圖的評估結果打印出來,例如“慢”,“足夠快”或“危險”快速”。

但是,在應用switch-case之前,我認為我必須強制用戶僅在文本字段中輸入Integer數字。 如果他們輸入任何字母,則將出現文本視圖:“格式錯誤!請重試!”

我認為如果要解決問題,我必須對語句做些事情,但是事實是我才剛剛開始學習Swift,並且沒有想到任何可能的解決方案。 請幫我。 謝謝。

如果使用情節提要,只需選擇TextField並將Keyboard類型更改為NumberPad。 這將只允許輸入整數。 然后,當您取回輸入時,可以將其轉換為Int型。

   if let convertedSpeed = Int(textField.text) {
        // Implement whatever you want
   } else {
        // Notify user of incorrect input
   }
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
        }
    }

您可以在故事板中的屬性檢查器下指定文本字段的鍵盤類型。 “十進制”將是您的理想選擇(假設可能的輸入例如為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。 我希望這可以使您清楚;)

您可以通過兩種方式解決它。

  1. 將鍵入的文本轉換為Integer值。

    Int(textfield.text!)

  2. 這很簡單。 選擇鍵盤類型為數字/數字和標點板。 因此,用戶只能輸入數字。

在此處輸入圖片說明

希望能幫助到你..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM