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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/13 00:55