LoginSignup
7
7

More than 5 years have passed since last update.

Swift でアラートを出す(修正)

Posted at

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
}

}

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7