質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

273閲覧

SettingViewControllerの picker viewで設定した値を viewControllerで利用したい。

john-crispy

総合スコア6

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

1グッド

1クリップ

投稿2020/03/12 07:29

SettingViewControllerの picker viewで設定した値を viewControllerで利用したい。

イメージ説明

(例)swiftでオリジナルアプリを作成しています。
①右のpicker viewで1~18までの数字を選べるように設定
→②決定ボタンを押すとview Contorollerの画面に戻る。
→③????ボタンを押すと、選んだ数字以下の数字から1つを選んでLabel部分に出てくる
例:picker viewで5を選ぶ→????を押す→1,2,3,4,5の中からランダムで数字が一つ表示

というシステムを作ろうとしています。

発生している問題・エラーメッセージ

③の部分でつまっています。 ①で // UIPickerViewに表示するデータをArrayで作成 let settingArray : [Int] = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18] という風に設定したのですが、 ③のシステムを実行するコードがわかりません。

該当のソースコード

swift

1 2### ViewController.swift 3 4import UIKit 5 6class ViewController: UIViewController { 7 8 // カウント(頭数)の変数を作成 9 var count = 0 10 // 設定値を扱うキーを設定 11 let settingKey = "horse_value" 12 13 override func viewDidLoad() { 14 super.viewDidLoad() 15 // Do any additional setup after loading the view. 16 17 // UserDefaultsのインスタンスを生成 18 let settings = UserDefaults.standard 19 // UserDefaultsの初期値を登録 20 settings.register(defaults: [settingKey:1]) 21 22 23 } 24 25 @IBOutlet weak var countLabel: UILabel! 26 27 28 @IBAction func settingButtonAction(_ sender: Any) { 29 // 画面移動を行う 30 performSegue(withIdentifier: "goSetting", sender: nil) 31 } 32 33 34 @IBOutlet weak var answerLabel: UILabel! 35 36 @IBAction func startButtonAction(_ sender: Any) { 37 answerLabel.text = "「博打なんてチョコレート。」" 38 39 // 数字 40 var answerNumber = 0 41 42 let settingArray :[Int] = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18] 43 44 if settingArray == 1 { 45 countLabel.text = "1番" 46 } 47 48 49 50 51 } 52 53 54 // 画面の更新をする(戻り値:remainCount:残り時間) 55 func displayUpdate() -> Int { 56 57 let settings = UserDefaults.standard 58 // 取得した頭数をcountValueに渡す 59 let countValue = settings.integer(forKey: settingKey) 60 // 同じ 61 let remainCount = countValue 62 // countValueをラベルに表示 63 countLabel.text = "(remainCount)番" 64 // 戻り値 65 return remainCount 66} 67 68 // 画面切り替えのタイミングで処理を行う 69 override func viewDidAppear(_ animated: Bool) { 70 //タイマーの表示を更新する 71 _ = displayUpdate() 72 } 73 74} 75 76 77 78 79 80### SettingViewController.swift 81 82 83import UIKit 84 85class SettingViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { 86 87 // UIPickerViewに表示するデータをArrayで作成 88 let settingArray : [Int] = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18] 89 90 // 設定値を覚えるキーを設定 91 let settingKey = "horse_value" 92 93 94 override func viewDidLoad() { 95 super.viewDidLoad() 96 97 // Do any additional setup after loading the view. 98 99 // countSettingPickerのデリゲートとデータソースの通知先を設定 100 countSettingPicker.delegate = self 101 countSettingPicker.dataSource = self 102 103 // UserDegaultsの取得 104 let settings = UserDefaults.standard 105 let horseValue = settings.integer(forKey: settingKey) 106 107 //Pickerの選択を合わせる 108 for row in 0..<settingArray.count { 109 if settingArray[row] == horseValue { 110 countSettingPicker.selectRow(row, inComponent: 0, animated: true) 111 } 112 } 113 } 114 115 116 /* 117 // MARK: - Navigation 118 119 // In a storyboard-based application, you will often want to do a little preparation before navigation 120 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 121 // Get the new view controller using segue.destination. 122 // Pass the selected object to the new view controller. 123 } 124 */ 125 126 @IBOutlet weak var countSettingPicker: UIPickerView! 127 128 129 @IBAction func decisionButtonAction(_ sender: Any) { 130 // 前画面に戻る 131 _ = navigationController?.popViewController(animated: true) 132 } 133 134 // UIPickerViewの列数を設定 135 func numberOfComponents(in pickerView: UIPickerView) -> Int { 136 return 1 137 } 138 139 // UIPickerViewの行数を取得 140 func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 141 return settingArray.count 142 } 143 144 // UIPickerViewの表示する内容を設定 145 func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 146 return String(settingArray[row]) 147 148 149 } 150 151 // picker選択時に実行 152 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 153 // UserDefaultsの設定 154 let settings = UserDefaults.standard 155 settings.setValue(settingArray[row], forKey: settingKey) 156 settings.synchronize() 157 } 158 159 160} 161 162

試したこと

let settingArray : [Int] = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]を View Controllerの方に再度設定してみました。ただ、SettingViewControllerで選んだ数値のデータからそのまま利用したいので、この方法は上手くいきませんでした。

xcode:11.3.1

s.k👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ピッカーで選んだ数字は

let settings = UserDefaults.standard

// 取得した頭数をcountValueに渡す
let countValue = settings.integer(forKey: settingKey)

で取れるはずなので、
1からcountValueまでの乱数を生成すればいいです。

たぶん

let hoge = Int.random(in: 1...countValue)

こんな感じで乱数を作れると思うので、あとは好きなようにしてください。

投稿2020/03/12 08:43

編集2020/03/12 08:50
takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

john-crispy

2020/03/13 00:55

ありがとうございます! 試してみてまたご連絡させていただきます☺️
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問