2017-05-04 55 views
0

我有一段代碼,旨在讓用戶輸入他們的名字,並按下按鈕時前進到下一個屏幕。如果沒有值輸入,程序不應允許用戶繼續。程序會檢測何時不輸入名稱,也不會移動到下一個屏幕,而是終止於類型爲NSException的未捕獲異常。我希望允許用戶繼續輸入值(名稱),直到實際輸入名稱(即名稱值不爲空)。有什麼辦法可以做到這一點? while/for循環似乎不起作用。計數字符的UITextField崩潰與NSException

@IBAction func NameEditingDidChange(_ sender: Any) { 

      NextButton.isEnabled = true 

    } 
    // Once button is pressed 
     @IBAction func NextButtonPressed(_ sender: Any) { 
    // Gets user's name from textfield 
    print("12345abcde") 

    self.name = NameInput.text! 

    // If textfield is not empty, moves to next storyboard 

      if name.characters.count != 0 { 

       print("in ") 

       performSegue(withIdentifier: "fistBump", sender: nil) 

      } 
      else { 
// Prints this line and terminates 
       print("text field is empty") 
      } 
+0

需要'self.'在'self.name.characters.count'我想。 – Eggsalad

回答

0

它崩潰,因爲你試圖訪問characters陣列的count當它是零。更改

if name.characters.count != 0 

if !name.isEmpty 
0

如果文本框爲空,然後分配空字符串。

self.name = NameInput.text ?? "" 

if !NameInput.text.isEmpty { 

} 

不要把!NameInput.text!的力量展開事業,如果文本框爲空,則崩潰

嘗試用這種方式來有效的名稱或不

func isValidName(testStr:String) -> Bool { 
     // print("validate name: \(testStr)") 
     let nameRegEx = "^[\p{L} \.\-]+$" 

     let nameTest = NSPredicate(format:"SELF MATCHES %@", nameRegEx) 
     return nameTest.evaluate(with: testStr) 
    } 

^[\ p {L} .-] + $

^在字符串

比賽出現在下面[\p{L} \.\-]+
+量詞一個和無限的時間之間比賽,多次,儘可能需要回饋列表中的單個字符的開始斷言位置(貪婪)

\p{L}匹配來自任何語言的任何種類的字母 字面上的字符匹配(區分大小寫)
\.匹配字符。字面上(區分大小寫)
\-匹配字符 - 字面(區分大小寫)

$斷言位置在字符串的末尾,或之前,在字符串的末尾(如果有的話)的行終止右

從這裏https://regex101.com/#javascript

0

其在處理可選變量測試你的名字的問題。 UITextField .text屬性是可選的。 我希望你的名字是你在NameInput中存儲用戶輸入的屬性。 只需聲明您的名稱屬性爲可選。 var name:String?

在點擊動作,

@IBAction func NextButtonPressed(_ sender: Any) { 
     // Gets user's name from textfield    
     self.name =   NameInput?.text?.stringByReplacingOccurrencesOfString(" " , withString: "")    
     // If textfield is not empty, moves to next storyboard 
     if self.name?.characters.count > 0 {// Navigate now 
     } 
    }