UITextFieldでsecureTextEntryの切り替えをする際の注意点


パスワード入力を実装する際、UITextFieldのsecureTextEntryを使用するかと思います。
パスワードを一時的に表示する機能を付ける際はsecureTextEntryを切り替えるわけですが、そこで問題が起きたのでメモ。

非表示 -> 表示の切り替えをした際に、キャレットが非表示の場合に表示される黒丸の位置に表示されたままになってしまい、実際の文字とかなりずれてしまいました。

非表示状態

表示状態

単純にpwTextField.secureTextEntry = !pwTextField.secureTextEntryとして表示/非表示を切り替えるとこうなります。

解決策
secureTextEntryの切り替え後、

pwTextField.becomeFirstResponder()

で明示的にfirstResponderにしてあげるとキャレットがちゃんと文字に合わせた位置に表示されます。

Swift2.1, iOS8.1+で動作確認済みです。