2016-08-01 7 views
1

Ich habe eine App, die abstürzt, wenn ein Benutzer das falsche Format in einen Textrahmen eingibt. Wie kann ich 1) sicherstellen, dass die Tastatur der richtige Typ ist (was in meinem Fall eine Zifferntastatur wäre) und 2) es so machen, dass die App nicht abstürzt, wenn ein falsches Format eingegeben wird? Hier ist mein Code für diese Schaltfläche:So stellen Sie sicher, dass die Eingabe in Swift korrekt ist

@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) 



} 

Antwort

0

sollten Sie Setup-Eigenschaften für UITextField in Methode addTextFieldWithConfigurationHandler und es wird nicht abstürzen

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

sicherstellen, dass die Tastatur ist der richtige Typ (das wäre eine Nummerntastatur in meinem Fall)

Eigentlich müssen Sie nichts von Ihrem aktuellen Code ändern!

textW.keyboardType = .NumberPad 

Beachten Sie jedoch, dass iPads keine Nummernblocktastatur haben. Wenn Sie ein Nummernfeld auf dem iPad anzeigen möchten, müssen Sie Ihr eigenes erstellen.

machen es so die App nicht abstürzt, wenn ein falsches Format eingegeben wird

Das ist ein bisschen mehr Arbeit erfordert. In dem Action-Handler für die „Senden“ Aktion, eine wenig Kontrolle, nachdem Sie die Zeichenfolge konvertieren zu verdoppeln:

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)" 

})) 

Oder Sie können auch ganz WKTextFieldFormatter welche Blöcke ungültige Eingabe ausprobieren.

Verwandte Themen