Swiftのお勉強にUICatalogをまねぶ4(UIAlertController-2)

開発

前回はAlert Controllerを途中までやりました。

今回はその続きです。

テキストフィールド付きAlert

Alertにテキストフィールドを表示させることができます。
コードはこちら。

ui4-01

alertController.addTextFieldWithConfigurationHandler
でAlert Controllerにテキストフィールドを表示させることができます。

表示はこんな感じ。

ui4-03

ただ、「WithConfigurationHandler」と書いている割に空の関数を指定しているため、
テキストを打っても何も変わりませんね。

テキストの内容によって動作を変えるAlert

というわけで早々に次のAlertに向かいます。

ui4-02

今回はaddTextFieldWithConfigurationHandlerの引数にちゃんと処理のあるTrailing Closureが指定されています。

        alertController.addTextFieldWithConfigurationHandler { textField in
            NSNotificationCenter.defaultCenter().addObserver(self, selector: "handleTextFieldTextDidChangeNotification:", name: UITextFieldTextDidChangeNotification, object: textField)
            textField.secureTextEntry = true;
        }

先に最終行について説明しておくと、secureTextEntryをtrueにすることでパスワード形式の入力にしています。

で、その前の行でイベント通知を扱うNSNotificationCenterにObserverを追加しています。
監視対象はもちろんtextField、監視動作はUITextFieldTextDidChangeNotificationということで、

UITextFieldTextDidChangeNotification

Notifies observers that the text in a text field changed. The affected text field is stored in the object parameter of the notification.

テキストフィールドへの変更を監視します。

で、変更があった際に呼ばれるhandleTextFieldTextDidChangeNotificationを見てみると、

    func handleTextFieldTextDidChangeNotification(notification: NSNotification) {
        let textField = notification.object as UITextField
        secureTextAlertAction!.enabled = textField.text.utf16count >= 5
    }

カウントが5桁以上である場合のみ、secureTextAlertActionのenabledをtrueにします。
secureTextAlertActionにはotherActionを代入しているので、OKボタンがここで制御されるということになります。

画面はこんな感じです。

ui4-04

5文字以上入力必須のパスワード入力画面って感じですね。
(これ、5文字以上で確かにOKボタンは押せるようになるけど、色が変わらないのはどうすればいいんだろう…)

コメント

タイトルとURLをコピーしました