2016-08-01 7 views
1

У меня есть приложение, которое сбой, когда пользователь вводит неправильный формат в текстовый фрейм. Как я могу: 1) убедиться, что клавиатура является правильным типом (в моей случае это будет цифровая клавиатура) и 2) сделать так, чтобы приложение не вылетало, если введен неправильный формат? Вот мой код для этой кнопки:Как убедиться, что ввод отформатирован правильно в Swift

@IBAction func resetDistanceWalkedGoalButton(sender: AnyObject) { 
    var distanceWalkedAlert = UIAlertController(title: "Distance Walked", message: "Current Goal: \(distanceWalkedGoal) miles – Enter a new goal. (e.g. '1.75')", preferredStyle: UIAlertControllerStyle.Alert) 

    distanceWalkedAlert.addTextFieldWithConfigurationHandler { 
     (textField) in 
    } 

    distanceWalkedAlert.addAction(UIAlertAction(title: "Submit", style: .Default, handler: { 
     (action) in 

     let textW = distanceWalkedAlert.textFields![0] as UITextField 
     print(textW) 

     textW.keyboardType = UIKeyboardType.NumberPad 

     let distanceWalkedGoalFromAlert = Double(textW.text!) 


     distanceWalkedGoal = distanceWalkedGoalFromAlert! 

     print(distanceWalkedGoal) 
     self.distanceWalkedGoalNumber.text = "\(distanceWalkedGoal)" 

    })) 

    distanceWalkedAlert.addAction(UIAlertAction(title: "Cancel", style: .Default, handler: { 
     (action) in 

     self.dismissViewControllerAnimated(true, completion: nil) 


    })) 

    self.presentViewController(distanceWalkedAlert, animated: true, completion: nil) 



} 

ответ

0

вы должны свойство установки для UITextField в методе addTextFieldWithConfigurationHandler и не врезаться

alertController.addTextFieldWithConfigurationHandler { (textField) in 
     textField.placeholder = "Enter RSS Link here ..." 
     textField.text = link 
     textField.keyboardType = UIKeyboardType.NumberPad 

     // add Notification to handle text input if you need 
     NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.textDidChange), name: UITextFieldTextDidChangeNotification, object: linkTextField) 

    } 
1

убедитесь, что клавиатура является правильным типом (который был бы цифровая клавиатура в моем случае)

На самом деле, вам не нужно менять текущий код!

textW.keyboardType = .NumberPad 

Обратите внимание, что в iPad нет клавиатуры с клавиатурой. Если вы хотите показать цифровую панель на iPad, вы должны создать свой собственный.

сделать так, приложение не вылетать, если неправильный формат ввода

Это требует немного больше работы. В обработчику действия «Отправить», сделать небольшую проверку после того, как вы преобразовать строку в два раза:

distanceWalkedAlert.addAction(UIAlertAction(title: "Submit", style: .Default, handler: { 
    (action) in 

    let textW = distanceWalkedAlert.textFields![0] as UITextField 
    print(textW) 

    textW.keyboardType = UIKeyboardType.NumberPad 

    let distanceWalkedGoalFromAlert = Double(textW.text!) 

    guard distanceWalkedGoalFromAlert != nil else { 
     // if code execution goes here, this means that invalid input is detected. 
     // you can show another alert telling the user that here. 
     return 
    } 

    distanceWalkedGoal = distanceWalkedGoalFromAlert! 

    print(distanceWalkedGoal) 
    self.distanceWalkedGoalNumber.text = "\(distanceWalkedGoal)" 

})) 

Или вы также можете попробовать WKTextFieldFormatter который блокирует недопустимый ввод в целом.