2017-08-17 84 views
0

假設我有一個文本字段,需要分鐘和小時作爲輸入。現在我怎麼能限制文本字段小時只能到24和分鐘字段爲60.我如何限制小時和秒的文本字段?

+0

在'UITextFieldDelegate'方法'didEndEditing'方法添加了檢查,並檢查這些值 –

+0

一些提示更....我知道這一點,但不能創建的想法如何檢查 –

+0

您只使用一個'的UITextField '或者其中兩個? –

回答

1

文本字段的內容可以通過它的委託方法進行控制,包括詢問是否爲shouldChangeCharacters。如果用戶輸入的內容超出範圍,則可以通過返回false來糾正,甚至不允許。

但一個好的用戶界面的做法是不讓用戶犯錯誤開始。這就是pickers的原因。

0

讓您的ViewController類符合UITextFieldDelegate協議,設置minuteField.delegate = selfhourField.delegate = self,然後實現shouldChangeCharactersIn range功能,並檢查輸入數字和< = 2.可以使用didEndEditing的字符數,檢查數在你預期的範圍內。

extension VC: UITextFieldDelegate { 
    func textFieldDidEndEditing(_ textField: UITextField) { 
     if textField == minuteField { 
      guard let minuteText = textField.text, let minutes = Int(minuteText) else {return} 
      if minutes < 0 || minutes > 60 { 
       textField.text = "" 
      } 
     } else if textField == hourField { 
      guard let hourText = textField.text, let hours = Int(hourText) else { return } 
      if hours < 0 || hours > 24 { 
       textField.text = "" 
      } 
     } 
    } 

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 
     if string.isEmpty { 
      return true 
     } else if string.rangeOfCharacter(from: CharacterSet.decimalDigits.inverted) != nil { 
      return false 
     } else if let numberOfChars = textField.text?.characters.count, numberOfChars >= 2 { 
      return false 
     } else { 
      return true 
     } 
    } 
} 
+0

我覺得不太對,您必須首先計算替換後的文本*將被替換(stringByReplacingOccurancesInRange),然後測試該字符串的有效性。 – danh

+0

@danh你說得對,我錯了。測試我的代碼並糾正它,現在它工作正常。 –

+0

它更好 - 你正在測試添加的字符串是否包含數字。 OP旨在限制整個輸入的數值。更徹底的方法是根據當前文本形成一個字符串,並且範圍被改變......'textField.text.stringByReplacingCharactersInRange:withString'。 (請記住,用戶可能會在字段中的任何地方粘貼文本)。測試候選輸入的有效性(例如,如果它的intValue <60,或其他)。 – danh