これ、問題と言われているようですが問題では無いかもと思っています。編集可能であれば、リンク検知しない。編集不可能であればリンク検知するという用にはっきり分かれたので、「編集したいと思ってタップしたのにリンクが開いちゃう」的な問題はなくなると思います。
まぁそれでも、やっぱり編集確定した時に入力したリンクがクリックできたらいいなと思っていたのでちょっと対策を講じました。
解決しようとした問題
[1] UITextViewをeditable=YESかつselectable=YESにした状態でDetectionを一通りYESにしても、編集完了後にdetectionされない
editableをNOにすることでdetectionされるようになりました。
[2] editableがNOだと、TextViewをタップした時に編集ができない
editableをトグルで変更するボタンを作りました。
[3] トグルで一旦editable=NOにした後に、再度editable=YESにすると、editableにはなるが、リンクやアドレスなどの選択色が消えない。
水色の選択色から元の色に戻らないのです。。。これは、textView.textColorで色を指定してもダメです。textView.textに現在のテキストを設定することで解消しました。
コード
UIToolbarにbarbuttonItemとしてトグルのボタンをつけた実装です。状態変更のボタンを付けるのが全てのケースで良いとは限りませんが、僕のケースではこれで特にユーザビリティを損ねないと思ったのでこうしました。
- self.isDetectable はBOOLのインスタンス変数です。
if (self.isDetectable) { self.isDetectable = NO; self.contentTextView.editable = YES; self.contentTextView.text = self.contentTextView.text; [sender setImage:[UIImage imageNamed:@"toolbar_detection_off"]]; } else { self.isDetectable = YES; self.contentTextView.editable = NO; [sender setImage:[UIImage imageNamed:@"toolbar_detection_on"]]; }
誰かの役に立てば。あと、もっと良い方法をご存じの方がいたら教えて下さいー。