背景
シュミレータで動きを確認しつつ、実機で実行してみたらTextFieldに入力した値が濁点、半濁点のつけ外し、変換が出来なくなっていて困ったのでメモ。
原因
TextFieldで文字列の入力数の制限をかけていたのですが、それが問題でした。
TextFieldは、Eding Changedで接続してあります。
・問題のソースコード
guard let text = username.text else { return }
username.text = String(text.prefix(20))
最大文字数を20文字とし、それ以上は入力できないようにしていたのですが、この"prefix"が値を確定してしまうため、入力できませんでした。
解決策
一旦のしのぎとしてはこのような感じ(パワープレイ感は否めない)
guard let text = username.text else { return }
if text.count > 20 {
username.text = String(text.prefix(20))
}
カウントが20文字を超えたときに固定するようにしています。
ただこれだと20文字を超える変換が出来ませんが、20文字以上の入力はそもそも受け付けないということになっているため、一旦これで良しとします。