回答編集履歴

1

コメントに従い回答を追記

2020/05/10 00:42

投稿

TsukubaDepot
TsukubaDepot

スコア5086

test CHANGED
@@ -95,3 +95,197 @@
95
95
 
96
96
 
97
97
  ボタンを押した時にイメージピッカーを開くのであれば、`present(myImagePicker, animated: true, completion: nil)`をボタンを押した時の処理の中に記述する必要がありますので、ご確認ください。
98
+
99
+
100
+
101
+ ---
102
+
103
+
104
+
105
+ `ViewController` はこんな感じになります。
106
+
107
+ ⑤については、オリジナルのコードのままで大丈夫です。
108
+
109
+
110
+
111
+ ```swift
112
+
113
+ import UIKit
114
+
115
+
116
+
117
+ class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
118
+
119
+
120
+
121
+ var myImagePicker: UIImagePickerController!
122
+
123
+
124
+
125
+ // MARK: 次の画面に移るための BarButtonItem
126
+
127
+ @IBOutlet weak var nextBarButtonItem: UIBarButtonItem!
128
+
129
+
130
+
131
+ // MARK: ③の遷移前の画面に表示するイメージビュー
132
+
133
+ @IBOutlet weak var sampleView: UIImageView!
134
+
135
+
136
+
137
+ // ①アイコンをタップするとviewControllerが開く
138
+
139
+ override func viewDidLoad() {
140
+
141
+ super.viewDidLoad()
142
+
143
+
144
+
145
+ self.title = "設定モード"
146
+
147
+
148
+
149
+ // MARK: 画像が選択されていないときには BarButtonItem を無効にする
150
+
151
+ nextBarButtonItem.isEnabled = false
152
+
153
+ }
154
+
155
+
156
+
157
+ //②「フォトライブラリを開く」ボタンを押すとフォトライブラリが起動する
158
+
159
+ @IBAction func photoLibraryButton(_ sender: Any) {
160
+
161
+ // インスタンス生成
162
+
163
+ myImagePicker = UIImagePickerController()
164
+
165
+
166
+
167
+ // デリゲート設定
168
+
169
+ myImagePicker.delegate = self
170
+
171
+
172
+
173
+ // 画像の取得先はフォトライブラリ
174
+
175
+ myImagePicker.sourceType = UIImagePickerController.SourceType.photoLibrary
176
+
177
+
178
+
179
+ // 画像取得後の編集を不可に
180
+
181
+ myImagePicker.allowsEditing = false
182
+
183
+
184
+
185
+ // MARK: ここでイメージピッカーを表示させる
186
+
187
+ present(myImagePicker, animated: true, completion: nil)
188
+
189
+ }
190
+
191
+
192
+
193
+ /**
194
+
195
+ 画像が選択された時に呼ばれる.
196
+
197
+ */
198
+
199
+ // MARK: ③ライブラリが閉じると、遷移前のimageViewに表示される。
200
+
201
+ // ここでは、遷移前の画面に選択したイメージを表示した上、BarButtonItem を有効にするだけ
202
+
203
+ func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
204
+
205
+
206
+
207
+ // 選択された画像を取得
208
+
209
+ if let myImage = info[.originalImage] as? UIImage {
210
+
211
+ // 遷移前の画面に画像を表示する
212
+
213
+ sampleView.image = myImage
214
+
215
+
216
+
217
+ // BarButtonItem を有効にする
218
+
219
+ nextBarButtonItem.isEnabled = true
220
+
221
+ }
222
+
223
+ // イメージピッカーを消す
224
+
225
+ dismiss(animated: true, completion: nil)
226
+
227
+ }
228
+
229
+
230
+
231
+ /**
232
+
233
+ 画像選択がキャンセルされた時に呼ばれる.
234
+
235
+ */
236
+
237
+ func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
238
+
239
+ // モーダルビューを閉じる
240
+
241
+ self.dismiss(animated: true, completion: nil)
242
+
243
+ }
244
+
245
+
246
+
247
+ // ④NavigationBarにある、BarButtonItemで、画面遷移を行う。
248
+
249
+ @IBAction func nextpages(_ sender: Any) {
250
+
251
+ // MARK: セグエを実行する。
252
+
253
+ performSegue(withIdentifier: "toNext", sender: nil)
254
+
255
+ }
256
+
257
+
258
+
259
+ // MARK: ④の続き。
260
+
261
+ // perfomSegue を実行すると、prepare が呼び出される。ここで値渡しを行う
262
+
263
+ override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
264
+
265
+ // segue 名が "toNext" か判断する
266
+
267
+ if segue.identifier == "toNext" {
268
+
269
+ // segue の遷移先が SecondViewController の場合
270
+
271
+ if let nextVC = segue.destination as? SecondViewController {
272
+
273
+ // 遷移先のプロパティ(変数)に値をコピーする
274
+
275
+ nextVC.mySelectedImage = sampleView.image
276
+
277
+ }
278
+
279
+ }
280
+
281
+ }
282
+
283
+ }
284
+
285
+ ```
286
+
287
+ 画面デザインはこんな感じです。
288
+
289
+
290
+
291
+ ![イメージ説明](8fc024677e01c83381eab19f48363c20.png)