Swiftで遊ぼう! - 283 - Autolayoutの実習2
Swiftで遊ぼう!の古い記事-> Life-LOG OtherSide
質問 : Swiftで遊ぼう! - 252 - FaceViewプロジェクト始動 - Swiftで遊ぼう! on Hatena
レイアウトに並べたオブジェクトにコードを組み込んでいく作業は今までに取り組んだ内容の復習になります。
先ず、passwordFieldフィールド、passwordLabelラベル、そしてtoggleSecurityボタンに対してコードを組み込みます。
toggleSecurity(Change Security)ボタンを押すと、passwordFieldは文字がマスクされ(Secureに変化)、passwordLabelのタイトルは「Secured Password」に変更される仕組みを組み込んでいきます。
切り替えは、真実か否かのBool型を使うのがいいようです。
UITextFieldのオプショナル・プロパティSecureTextEntryを利用します。
trueなら入力文字にマスクをかけて、passwordLabelのタイトルを「Secured Password」に変更するようにします。
まず、公開変数としてsecureを用意していきます。
var secure: Bool = false { didSet { updateUI() } }
後でupdateUI()メソッドを実装しますが、ここでプロパティ・オブザーバーを使って、secureに新しい値がセットされるとupdaiteUI()メソッドを呼んでユーザーインターフェイスをリフレッシュする仕組みです。これが実際にプロパティ・オブザーバーを利用する実例です。この頃は想像もできなかった利用法というわけです(^_^;)。
updateUI()は次のようにコードします。
private func updateUI() { passwordField.secureTextEntry = secure passwordLabel.text = secure ? "Secured Password" : "Password" }
このupdateUI()、何をするのかと言えば、最初にpasswordFieldの文字をマスクするかどうかです。secureTextEntryは覚えるしかないAPIですね。これがtrueなら文字はマスクです。
そして、2行目は「A ? B : C」という構文。Aが真実ならBでfalseならCというやつ。secureを評価して、「Secured Passwaord」か「Password」のどちらかrを入力するという仕組みですね。
この関数がどういう時に呼ばれるのがベストか考えると、secureに値が入力された時、これは既にプロパティ・オブザーバーで説明しました。そして、ViewControllerのViewの書き換え、最初にインスタンスができた時なので、viewDidLoad()メソッド内ですね。
import UIKit class ViewController: UIViewController { @IBOutlet weak var passwordField: UITextField! @IBOutlet weak var passwordLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() updateUI() } var secure: Bool = false { didSet { updateUI() } } private func updateUI() { passwordField.secureTextEntry = secure passwordLabel.text = secure ? "Secured Password" : "Password" } @IBAction func toggleSecurity(sender: AnyObject) { secure = !secure } }
secureの値をトグルするのが、toggleSecurityボタンです。押されるとtrueとfalseが入れ替わるという仕組み。
なるほどで終了。