AppSeedのアプリ開発ブログ

アプリ開発会社AppSeed(アップシード)開発担当のブログです。iOS、Android、Unity、Cocos2d-xなどアプリ開発関連のTipsや備忘録、アプリ開発に役立つ情報を発信します。

UITextViewのisEditableをfalseにしてもキーボードのinputAccessoryViewが表示されてしまう場合の対処法【iOSアプリ開発】

https://i-cdn.phonearena.com/images/article/100355-image/Bizarre-chapter-in-Apple-iPhone-history-ends-with-iOS-11.2-update.jpg



日記アプリでUITextViewを編集可能なモードか、編集できないモードにするか切り替える処理を実装したのですが、
「isEditable」をfalseにしてもUITextViewをタップするとキーボードのinputAccessoryView(キーボードの上にコードで追加したカメラアイコン)が表示されてしまいまいました。

今回はこの現象の対処法について。


UITextViewの「isEditable」について

f:id:no-work-no-life-4081:20181018103655p:plain

Apple Developer Documentation


UITextViewで編集可能か編集不可能かを切り替える場合、「isEditable」を使用すると思うのですが、
今回の場合、「isEditable」をfalseにすると、キーボード自体は表示されませんが、キーボードに追加したinputAccessoryViewが表示される状態(上の画像の状態)になります。

この現象を解決する方法を調べてみました。



UITextViewで「isEditable」をfalseにしてもキーボードやinputAccessoryViewが表示されてしまう場合の対処法


下記の記事が参考になりました。

stackoverflow.com

こちらの記事によると、「isEditable」と「isSelectable」をfalseにする必要があるとのこと。


Apple Developer Documentation


試しに「isEditable」と「isSelectable」をfalseにしてみたところ、キーボードのinputAccessoryViewが表示されなくなりました。

self.InputTextView.isEditable = false
self.InputTextView.isSelectable = false


おそらく、「isEditable」をfalseにするだけだと、編集不可だけど選択できる状態だからキーボードが立ち上がってしまう状態になってしまうと思われます。
「isSelectable」もfalseにして選択不可の状態にすればキーボードも反応しなくなるってことなんだと思われます。