12月2日に Swift でアラートを出す方法を投稿しましたが、Qiita のnakazy さんからここで使った UIAlertView は非推奨になっているとのご指摘をいただきました。
Class Reference を確認したところ確かに deprecated(非推奨)になっていました。そこで nakazy さんの教えに従って UIAlertController を使うように変更してみました。UIAlertView の時には Delegate プロトコルなどが必要でしたが、 UIAlertController ではその必要はなさそうです。
最も簡単なエラーメッセージでOKボタンタップで戻るというレベルのアラートだと
let myAlert = UIAlertController(title: "Data", message: "Invalid Data", preferredStyle: .Alert)
let defaultAction = UIAlertAction(title: "OK", style: .Default, handler: nil)
myAlert.addAction(defaultAction)
presentViewController(myAlert, animated: true, completion: nil)
となります。
例では、テキストフィールドへの入力キーボードの上部に Done のボタンをつけ、このボタンをタップすると、データを調べてデータが防いであると、エラーアラートを表示しています。
あらかじめ2つのテキストフィールドをストーリーボードに置いて ViewController クラスにリンクしてあります。
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var myField1: UITextField! // 入力テキストフィールド
@IBOutlet weak var myField2: UITextField! // メッセージ表示フィールド
override func viewDidLoad() {
super.viewDidLoad()
// ボタンビュー作成
var myKeyboard = UIView(frame: CGRectMake(0, 0, 320, 40))
myKeyboard.backgroundColor = UIColor.darkGrayColor()
// Doneボタン作成
var myButton = UIButton(frame: CGRectMake(5, 5, 80, 30))
myButton.backgroundColor = UIColor.lightGrayColor()
myButton.setTitle("Done", forState: UIControlState.Normal)
myButton.addTarget(self, action: "onMyButton", forControlEvents: UIControlEvents.TouchUpInside)
// ボタンをビューに追加
myKeyboard.addSubview(myButton)
// ビューをフィールドに設定
myField1.inputAccessoryView = myKeyboard
myField1.delegate = self
myField2.inputAccessoryView = myKeyboard
myField2.delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
// Done ボタンタップ時に実行するメソッド
func onMyButton () {
if myField1.editing {
var tmpValue: Double = NSString(string: myField1.text).doubleValue
if tmpValue <= 0 {
let myAlert = UIAlertController(title: "Data", message: "Invalid Data", preferredStyle: .Alert)
let defaultAction = UIAlertAction(title: "OK", style: .Default, handler: nil)
myAlert.addAction(defaultAction)
presentViewController(myAlert, animated: true, completion: nil)
} else {
self.view.endEditing(true )
}
} else {
myField1.text = "Not Editing"
}
if myField2.editing {
myField2.text = "Editing"
} else {
myField2.text = "Not Editing"
}
self.view.endEditing(true )
}
// リターンキーでのデリゲートメソッド
func textFieldShouldReturn(textField: UITextField) -> Bool {
self.view.endEditing( true )
return false
}
}