[英]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。 我希望這可以使您清楚;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.