どんなものを作成しているか
Twitterのようにコメント入力欄を設け、@入力でメンション機能も使えるようにしようとしています。
課題
コメント入力欄をtextViewで実装しているのですが、カーソルが長押しでしか移動できなくて困っています。
普通なら文字と文字の間をタップするとそこにカーソルが移動するはずです。しかし、textView内をタップしてもカーソルが移動せず、最後尾のままになってしまいます。
処理
Swift
1// テキストビューの外をタップした時にキーボードを閉じる 2let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tapOutside (_:))) 3tapGesture.cancelsTouchesInView = false 4tapGesture.delegate = self 5self.view.addGestureRecognizer(tapGesture) 6 7@objc 8 func tapOutside(_ sender: UITapGestureRecognizer) { 9 textView.resignFirstResponder() 10 } 11//↑ここまではよく見るやつ 12//↓以下は、@入力でメンション先一覧を表示させ、textView内をタップでメンション先一覧を非表示にしたくて実装しています 13 14// テキストビューをタップした時 15let tapGestureTextView = UITapGestureRecognizer(target: self, action: #selector(self.tapTextView (_:))) 16textView.addGestureRecognizer(tapGestureTextView) 17 18@objc 19func tapTextView(_ sender: UITapGestureRecognizer) { 20 // メンション先一覧を開いていたら閉じる 21 if let vc = self.presentedViewController as? MemberListViewController { 22 vc.dismiss(animated: true, completion: nil) 23 } 24 textView.becomeFirstResponder() 25}
textViewタップでメンション先一覧を非表示にする処理がカーソルを動かせなくしている要因と思っています。しかし解決方法がわからず困っています。ご教示よろしくお願い致します。
`textView.becomeFirstResponder()`を削除してみたり、
ifの中に移動してみたり、
したら何か変わるでしょうか?
コメントありがとうございますmm
削除やifの中に移動してみたのですが、変わらずでした・・・
すみません、、
UITapGestureRecognizerですと強めにイベントを奪ってしまう感じになってしまうのでしょうか。
下のリンク先のように、UITextViewを継承したクラスを実装して、タップのイベントを上書きする形で、「メンション先一覧を開いていたら閉じる」を実装してみたらどうでしょうか?
https://terakoya.site/bb/ios-uitext-view-touch-event/
回答1件
あなたの回答
tips
プレビュー