質問編集履歴

2

質問内容をより具体的に、コードを実際に書いているものに変更しました。

2020/08/19 10:59

投稿

Dave
Dave

スコア22

test CHANGED
@@ -1 +1 @@
1
- [swift]キーボードに隠れる時だけ画面を上へずらしたい
1
+ [swift]ドラッグして移動したTextfieldの座標を、キーボード表示時取得したい
test CHANGED
@@ -8,16 +8,14 @@
8
8
 
9
9
  Textfieldをタップしてキーボードが表示される際、キーボードにTextfieldが隠れた時にだけ画面を上にずらしてTextfieldが表示されるようにしたいです。
10
10
 
11
- [こちら](https://orangelog.site/swift/slide-view-with-keyboard/)のサイトを参考に、以下のように記述してみたのですが、キーボードに隠れない時でも画面が上へずれるため、Textfieldが画面上部にある際には見えなくなってしまいます。
12
-
13
- タップされたTextfieldの下辺のy座標をとり、その座標が(画面の高-キーボードの高さ)より大きい場合にのみ画面をずらせばと思いますがタップされたTextfield認識仕方分かりません
11
+ だそのTextfieldは別ボタンを押時に生成され、かつ```UIPanGestureRecognizer```を付与しているでドラッグして移動可能にしています。ですで、座標移動する度に異なりま
12
+
13
+ コードは以下のように記述してみたのですが、@objc func keyboardShow()でアクティブとなったTextfieldの座標を取得する方法が分かりませんでした。
14
14
 
15
15
  色々サイトを見てみたのですが、ピンポイントな解決法が見当たらず…。
16
16
 
17
17
 
18
18
 
19
-
20
-
21
19
  大変お手数ですが、良い方法があればご教示頂けませんでしょうか。
22
20
 
23
21
  宜しくお願い致します。
@@ -48,26 +46,6 @@
48
46
 
49
47
 
50
48
 
51
- //Textfiledを生成
52
-
53
- let textfield = UITextField()
54
-
55
-
56
-
57
- textfield.frame = CGRect(x: 100, y: 400, width: 100, height: 100)
58
-
59
-
60
-
61
- textfield.layer.borderWidth = 1
62
-
63
-
64
-
65
- textfieldarray.append(textfield)
66
-
67
-
68
-
69
- self.view.addSubview(textfield)
70
-
71
49
 
72
50
 
73
51
  // キーボードを開く際に呼び出す通知
@@ -84,7 +62,9 @@
84
62
 
85
63
  }
86
64
 
87
-
65
+
66
+
67
+
88
68
 
89
69
  // キーボード表示時、キーボードと予測変換部分の高さ分画面を上へずらす
90
70
 
@@ -148,4 +128,88 @@
148
128
 
149
129
  }
150
130
 
131
+
132
+
133
+ //Textfieldを生成するfunc
134
+
135
+ func createseat(){
136
+
137
+
138
+
139
+ let textfield = UITextField()
140
+
141
+
142
+
143
+ seatarray.append(textfield)
144
+
145
+
146
+
147
+ //何番目に生成されたかによってx座標をずらす。
148
+
149
+ textfield.frame = CGRect(x: 50*seatarray.count,
150
+
151
+ y: 300,
152
+
153
+ width: 100,
154
+
155
+ height: 100)
156
+
157
+
158
+
159
+ // "UIPanGestureRecognizer"を付与
160
+
161
+ let panGetsture = UIPanGestureRecognizer(target: self, action: #selector(panAction))
162
+
163
+ textfield.addGestureRecognizer(panGetsture)
164
+
165
+
166
+
167
+ // 以下の処理を入れることでタッチ許可する
168
+
169
+ textfield.isUserInteractionEnabled = true
170
+
171
+
172
+
173
+ self.view.addSubview(textfield)
174
+
175
+ }
176
+
177
+
178
+
179
+ // UITextfieldドラッグ時の処理
180
+
181
+ @objc func panAction(sender: UIPanGestureRecognizer) {
182
+
183
+
184
+
185
+ // ※引数の"sender"に、viewが含まれている。
186
+
187
+ let point: CGPoint = sender.translation(in: sender.view )
188
+
189
+
190
+
191
+ let movedPoint = CGPoint(x:sender.view!.center.x + point.x, y:sender.view!.center.y + point.y)
192
+
193
+ sender.view?.center = movedPoint
194
+
195
+
196
+
197
+
198
+
199
+ // ドラッグで移動した距離をリセット
200
+
201
+ sender.setTranslation(CGPoint.zero, in: sender.view)
202
+
203
+ }
204
+
205
+
206
+
207
+ //このボタンを押せばTextfieldを生成する
208
+
209
+ @IBAction func seatplus(_ sender: Any) {
210
+
211
+ createseat()
212
+
213
+ }
214
+
151
215
  ```

1

タイトルを修正しました

2020/08/19 10:59

投稿

Dave
Dave

スコア22

test CHANGED
@@ -1 +1 @@
1
- swiftキーボードに隠れる時だけ画面をずらしたい
1
+ [swift]キーボードに隠れる時だけ画面を上へずらしたい
test CHANGED
@@ -13,6 +13,8 @@
13
13
  タップされたTextfieldの下辺のy座標をとり、その座標が(画面の高さ-キーボードの高さ)より大きい場合にのみ画面をずらせればと思いますが、タップされたTextfieldの認識の仕方が分かりません。
14
14
 
15
15
  色々サイトを見てみたのですが、ピンポイントな解決法が見当たらず…。
16
+
17
+
16
18
 
17
19
 
18
20
 
@@ -84,7 +86,7 @@
84
86
 
85
87
 
86
88
 
87
- // キーボード表示時、キーボードと予測変換部分の高さ分画面を上ずらす
89
+ // キーボード表示時、キーボードと予測変換部分の高さ分画面を上ずらす
88
90
 
89
91
  @objc func keyboardShow(notification: NSNotification) {
90
92