質問編集履歴
2
質問内容をより具体的に、コードを実際に書いているものに変更しました。
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
|
-
|
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
タイトルを修正しました
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
|
|