質問編集履歴

2

swift

2020/12/27 11:26

投稿

Hayato1201
Hayato1201

スコア220

test CHANGED
File without changes
test CHANGED
@@ -25,3 +25,43 @@
25
25
  入力した文字をタップするとタップした場所にカーソルが動きますが、今回 UITextView 自体にGestureRecognizer を追加しているのでそれによって文字をタップした際にそのジェスチャーが呼ばれてしまいます。そのジェスチャーによって呼ばれるメソッドでは UITextView の表示を消すというものなので、カーソルを移動させようと文字をタップすると TextView が消えてしまします。それを避けたいです。
26
26
 
27
27
  ですので最終的に実現したい事はUITextViewの文字が入力されている以外の部分をtapしてメソッドが呼ばれ TextView が非表示になるという挙動です。そして文字をタップした場合は普通にカーソルが移動します。
28
+
29
+
30
+
31
+ 以下の様に無理やり呼んだメソッドの先でテキストの範囲の座標をtapした場合は何もしないという様にする事はできますが、それだとテキストをタップした際にカーソルの移動がうまくいかなくなってしまいます。。。
32
+
33
+
34
+
35
+ ```Swift
36
+
37
+ @objc func tapGesture(gestureRecognizer: UITapGestureRecognizer){
38
+
39
+
40
+
41
+ if let uiView = gestureRecognizer.view as? UITextView {
42
+
43
+ let range = (uiView.text as NSString).range(of: uiView.text)
44
+
45
+ let rect = uiView.layoutManager.boundingRect(forGlyphRange: range, in: uiView.textContainer)
46
+
47
+
48
+
49
+ let tapPoint = gestureRecognizer.location(in:uiView)
50
+
51
+
52
+
53
+ if !(tapPoint.x > rect.origin.x && tapPoint.x < rect.origin.x + rect.size.width
54
+
55
+ && tapPoint.y > rect.origin.y && tapPoint.y < rect.origin.y + rect.size.height) {
56
+
57
+ doSomething()
58
+
59
+ }
60
+
61
+
62
+
63
+ }
64
+
65
+ }
66
+
67
+ ```

1

追記

2020/12/27 11:26

投稿

Hayato1201
Hayato1201

スコア220

test CHANGED
File without changes
test CHANGED
@@ -13,3 +13,15 @@
13
13
  uiView.addGestureRecognizer(tapGestureRecognizer)
14
14
 
15
15
  ```
16
+
17
+
18
+
19
+
20
+
21
+ 追記
22
+
23
+
24
+
25
+ 入力した文字をタップするとタップした場所にカーソルが動きますが、今回 UITextView 自体にGestureRecognizer を追加しているのでそれによって文字をタップした際にそのジェスチャーが呼ばれてしまいます。そのジェスチャーによって呼ばれるメソッドでは UITextView の表示を消すというものなので、カーソルを移動させようと文字をタップすると TextView が消えてしまします。それを避けたいです。
26
+
27
+ ですので最終的に実現したい事はUITextViewの文字が入力されている以外の部分をtapしてメソッドが呼ばれ TextView が非表示になるという挙動です。そして文字をタップした場合は普通にカーソルが移動します。