回答編集履歴

2

reloadInputViews() を忘れていたので追記

2019/08/23 06:47

投稿

thyda.eiqau
thyda.eiqau

スコア2982

test CHANGED
@@ -164,6 +164,8 @@
164
164
 
165
165
  inEditingTextFieldTag = textField.tag
166
166
 
167
+ pickerView.reloadInputViews()
168
+
167
169
  }
168
170
 
169
171
 

1

1つのpickerViewで複数のtextFieldの入力をする場合のコードを追記

2019/08/23 06:47

投稿

thyda.eiqau
thyda.eiqau

スコア2982

test CHANGED
@@ -61,3 +61,165 @@
61
61
  }
62
62
 
63
63
  ```
64
+
65
+
66
+
67
+
68
+
69
+ # 追記修正
70
+
71
+ hamejiさんの回答をうけて修正します。上記のコードでも動きますが、現実的にpickerViewが2つ必要になるシーンは無いと思いますので……
72
+
73
+ また、[同様の質問](https://teratail.com/questions/74595)が過去にあったようです。あわせてご確認ください。
74
+
75
+ ```swift
76
+
77
+ import UIKit
78
+
79
+
80
+
81
+ class ViewController: UIViewController, UITextFieldDelegate, UIPickerViewDelegate, UIPickerViewDataSource {
82
+
83
+ // MARK: - Properies Define
84
+
85
+ @IBOutlet weak var textField: UITextField!
86
+
87
+ @IBOutlet weak var textField2: UITextField!
88
+
89
+ var pickerView: UIPickerView = UIPickerView()
90
+
91
+ let list: [String] = ["メインクーン", "シャム", "ロシアンブルー", "アメリカンショートヘア", "ネベロング", "ビクシーボブ", "ラガマフィン", "ラパーマ"]
92
+
93
+ let tono: [String] = ["tomtooof", "シャム", "dvecs v", "アedfvdvcvdvdev", "ネevdfvdsvグ", "ビクdvsdvsdv", "ラガマdvdsン", "ラパーsdvs sd!"]
94
+
95
+
96
+
97
+ // いま編集しようとしている textField の tag
98
+
99
+ var inEditingTextFieldTag: Int = 0;
100
+
101
+
102
+
103
+ // MARK: - View Lyfecycle
104
+
105
+ override func viewDidLoad() {
106
+
107
+ super.viewDidLoad()
108
+
109
+
110
+
111
+ // ピッカー設定
112
+
113
+ pickerView.delegate = self
114
+
115
+ pickerView.dataSource = self
116
+
117
+ pickerView.showsSelectionIndicator = true
118
+
119
+
120
+
121
+ // 決定バーの生成
122
+
123
+ let toolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 35))
124
+
125
+ let spacelItem = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil)
126
+
127
+ let doneItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(done))
128
+
129
+ toolbar.setItems([spacelItem, doneItem], animated: true)
130
+
131
+
132
+
133
+ // インプットビュー設定
134
+
135
+ textField.inputView = pickerView
136
+
137
+ textField.inputAccessoryView = toolbar
138
+
139
+ textField.tag = 1
140
+
141
+ textField.delegate = self
142
+
143
+ textField2.inputView = pickerView
144
+
145
+ textField2.inputAccessoryView = toolbar
146
+
147
+ textField2.tag = 2
148
+
149
+ textField2.delegate = self
150
+
151
+ }
152
+
153
+
154
+
155
+ // !!!: 中略
156
+
157
+
158
+
159
+ // MARK: - UITextFieldDelegate
160
+
161
+ /// いま編集しようとしている textField の tag を Property に保持しておく
162
+
163
+ func textFieldDidBeginEditing(_ textField: UITextField) {
164
+
165
+ inEditingTextFieldTag = textField.tag
166
+
167
+ }
168
+
169
+
170
+
171
+ // MARK: - UIPickerViewDataSource
172
+
173
+ // ドラムロールの列数
174
+
175
+ func numberOfComponents(in pickerView: UIPickerView) -> Int {
176
+
177
+ return 1
178
+
179
+ }
180
+
181
+
182
+
183
+ // ドラムロールの行数
184
+
185
+ func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
186
+
187
+ // 将来的に textField の数が増えたらcase文を増やしていく
188
+
189
+ switch(inEditingTextFieldTag) {
190
+
191
+ case 0: return list.count;
192
+
193
+ case 1: return tono.count;
194
+
195
+ default: return 0;
196
+
197
+ }
198
+
199
+ }
200
+
201
+
202
+
203
+ // MARK: - UIPickerViewDataSource
204
+
205
+ // ドラムロールの各タイトル
206
+
207
+ func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
208
+
209
+ // 将来的に textField の数が増えたらcase文を増やしていく
210
+
211
+ switch(inEditingTextFieldTag) {
212
+
213
+ case 0: return list[row];
214
+
215
+ case 1: return tono[row];
216
+
217
+ default: return nil;
218
+
219
+ }
220
+
221
+ }
222
+
223
+ }
224
+
225
+ ```