Help us understand the problem. What is going on with this article?

【iOS】【Swift】UIAlertControllerにUITextFiledを追加する方法、及びそれに関するTips

More than 5 years have passed since last update.

UIAlertControllerには、UITextFiledを追加する機能が用意されています。
※UIAlertViewにもありましたが。

それについて。

        //textの表示はalertのみ。ActionSheetだとtextfiledを表示させようとすると
        //落ちます。
        let alert:UIAlertController = UIAlertController(title:"action",
            message: "alertView",
            preferredStyle: UIAlertControllerStyle.Alert)

        let cancelAction:UIAlertAction = UIAlertAction(title: "Cancel",
            style: UIAlertActionStyle.Cancel,
            handler:{
            (action:UIAlertAction!) -> Void in
                println("Cancel")
        })
        let defaultAction:UIAlertAction = UIAlertAction(title: "OK",
            style: UIAlertActionStyle.Default,
            handler:{
            (action:UIAlertAction!) -> Void in
                println("OK")
        })
        alert.addAction(cancelAction)
        alert.addAction(defaultAction)

        //textfiledの追加
        alert.addTextFieldWithConfigurationHandler({(text:UITextField!) -> Void in
        })
        //実行した分textfiledを追加される。
        alert.addTextFieldWithConfigurationHandler({(text:UITextField!) -> Void in
        })
        presentViewController(alert, animated: true, completion: nil)

スクリーンショット 2014-09-28 2.24.57.png

またこれら追加したUITextFiledに対して、カスタマイズが可能です。
それは、addTextFieldWithConfigurationHandlerで行います。

例えば、placeholderを追加してみます。

        alert.addTextFieldWithConfigurationHandler({(text:UITextField!) -> Void in
            //対象UITextFieldが引数として取得できる
            text.placeholder = "first textField"
        })
        alert.addTextFieldWithConfigurationHandler({(text:UITextField!) -> Void in
            text.placeholder = "second textField"

        })

スクリーンショット 2014-09-28 2.27.45.png

次にOKを押した際にテキストの中身の取得をしてみますが、
それは、UIAlertControllerが、textFieldsというプロパティを持っているので、
それを使います。

        let defaultAction:UIAlertAction = UIAlertAction(title: "OK",
            style: UIAlertActionStyle.Default,
            handler:{
                (action:UIAlertAction!) -> Void in
                let textFields:Array<UITextField>? =  alert.textFields as Array<UITextField>?
                if textFields != nil {
                    for textField:UITextField in textFields! {
                        //各textにアクセス
                        println(textField.text)
                    }
                }
        })

次にラベルの追加をやってみます。

        alert.addTextFieldWithConfigurationHandler({(text:UITextField!) -> Void in
            text.placeholder = "first textField"
            var label:UILabel = UILabel(frame: CGRectMake(0, 0, 50, 30))
            label.text = "ID"
            text.leftView = label
            text.leftViewMode = UITextFieldViewMode.Always
        })
        alert.addTextFieldWithConfigurationHandler({(text:UITextField!) -> Void in
            text.placeholder = "second textField"
            var label:UILabel = UILabel(frame: CGRectMake(0, 0, 50, 30))
            label.text = "PASS"
            text.leftView = label
            text.leftViewMode = UITextFieldViewMode.Always

        })

スクリーンショット 2014-09-28 2.37.44.png

今回は、labelを追加しましたが、leftView(rightViewもあります)は
UIViewを指定する事が可能なので、ボタンや画像なども追加が可能かと思います。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away