概要
MDCTextFieldでplaceHolderが以下のようになる場合の対処法です。
- NGパターン
![TextNG.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F380239%2F874f627d-393f-baf1-f064-1e9b119d75d5.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=e4fc6987525c2990d2cbea997685f35c)
- OKパターン
![TextOK.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F380239%2F71e24233-c88c-970f-90f1-118f2c385ae0.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=bc8f3d02d17eafb819c579a386cc8170)
前提知識
placeHolderをfloatingさせる場合には、
MDCTextFieldのスタイルを設定するMDCTextInputController〜クラスを使う必要があります。
MDCTextInputController〜クラスは以下参照。
https://github.com/material-components/material-components-ios/tree/develop/components/TextFields/styling
この記事ではMDCTextInputControllerUnderlineクラスを例として使います。
イニシャライザに対象のMDCTextFieldインスタンスを渡すと
placeHolderがfloatingするようになります。
MDCTextInputControllerUnderline(textInput: $(MDCTextFieldのインスタンス))
原因と対策
問題点は、MDCTextInputControllerUnderlineのインスタンスの宣言位置です。
クラスのプロパティとして宣言しなければ正常に動作しません。
メソッドのローカル変数ではダメ。
サンプルコードは以下です。
- OKパターン
class MDCSample {
var style: MDCTextInputControllerUnderline!
private func setUp() {
style = MDCTextInputControllerUnderline(textInput: $(MDCTextFieldのインスタンス))
}
}
- NGパターン
class MDCSample {
private func setUp() {
var style: MDCTextInputControllerUnderline!
style = MDCTextInputControllerUnderline(textInput: $(MDCTextFieldのインスタンス))
}
}
ネタ元