2016-08-01 15 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

あなたが方法addTextFieldWithConfigurationHandlerでUITextFieldのためのセットアッププロパティをすべきであり、それが

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ブロック無効な入力を試してみることができます:あなたが倍増する文字列を変換した後、「送信」アクションのアクションハンドラでは、少しのチェックを行います。

関連する問題