前提・実現したいこと
現在、swiftを用いて、PickerViewのドラムロールで都道府県と細かい市区町村を選択できるようなシステムを作っているのですが、なかなか上手く行かず苦戦している状況で、まずそもそも今現在やろうとしている方法が実現可能かどうかがわからなくなってきたので分かる方がいらしたらご教授願います。
Pickerviewのドラムロールのcompornent0で大まかな場所(都道府県)、それを選択するとcompornent1に、都道府県に対応した市区町村が出てきて選択可能状態になる。
という様なものを目指しているのですが、可能がどうか分かる方がいらしたらよろしくお願いします。
目指している形
https://medium.com/@smehta/ios-swift-creating-a-dynamic-picker-view-843b3290e7f0
初めての質問なので足りない部分があったらすみません。
**4/3 23:11 結果的に質問したい事がわからないのでアドバイスができないという指摘を受けてコードを修正+わからない事を箇条書きにしました。
**
わからない部分
①コンポーネント番号取得まではできたが、そこからその番号を用いて分岐させたいが、どう動的に変化させるかがわからない
②表示を司る部分
func pickerView(_ pickerView: UIPickerView,
titleForRow row: Int,
forComponent component: Int) -> String? {}
この関数内で現在選ばれているコンポーネント番号を取得(comNum = pickerView.selectedRow(inComponent: 0))して分岐させようとしたが、選択されている番号と違った数字が表示され上手くいかないので結果的に動的に変化させる事ができない。
わかりづらい説明ですみませんが分かる方いらしたらよろしくお願いします。
現在のコード
swift
1 2import UIKit 3 4 5class ViewController: UIViewController , UIPickerViewDelegate, UIPickerViewDataSource { 6 7 var pickerView = UIPickerView() 8 9 var label = UILabel() 10 11 let todou = [ "東京都", "高知県", "香川県", "愛媛県"] 12 13 let komakai = ["江戸川区", "江東区", "中央区", "荒川区"] 14 15 let komakai2 = ["高知市", "四万十市", "安芸市", "なんとか市"] 16 17 let komakai3 = ["松山市"] 18 19 20 override func viewDidLoad() { 21 super.viewDidLoad() 22 23 // ViewContorller 背景色 24 self.view.backgroundColor = UIColor(red: 0.92, green: 1.0, blue: 0.94, alpha: 1.0) 25 26 // PickerView のサイズと位置 27 pickerView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: 300) 28 pickerView.backgroundColor = UIColor(red: 0.69, green: 0.93, blue: 0.9, alpha: 1.0) 29 30 // PickerViewはスクリーンの中央に設定 31 pickerView.center = self.view.center 32 33 // Delegate設定 34 pickerView.delegate = self 35 pickerView.dataSource = self 36 37 // Label 位置はPickerViewより150上に設定、高さを2行表示分とる 38 let yPosition = pickerView.frame.origin.y 39 label.frame = CGRect(x: 0, y: yPosition - 100, width: self.view.frame.width, height: 100) 40 41 // ラベルを2行表示 42 label.numberOfLines = 2 43 label.text = "都道府県" 44 // フォントサイズを大きく 45 label.font = UIFont.systemFont(ofSize: 36) 46 // テキストを中央寄せにする 47 label.textAlignment = NSTextAlignment.center 48 49 self.view.addSubview(pickerView) 50 self.view.addSubview(label) 51 } 52 53 // UIPickerViewのコンポーネント(列)の数 54 func numberOfComponents(in pickerView: UIPickerView) -> Int { 55 return 2 56 } 57 58 // UIPickerViewの行数、リストの数 59 //配列の数をカウントして表示する、必須 60 func pickerView(_ pickerView: UIPickerView, 61 numberOfRowsInComponent component: Int) -> Int { 62 if (component == 0){ 63 return todou.count 64 } 65 else if (component == 1){ 66 return komakai.count 67 } 68 return 0; 69 } 70 // UIPickerViewの最初の表示 71 //その都度呼び出し 72 func pickerView(_ pickerView: UIPickerView, 73 titleForRow row: Int, 74 forComponent component: Int) -> String? { 75 if (component == 0){ 76 return todou[row] 77 } 78 else if (component == 1){ 79 return komakai[row] 80 } 81 return ""; 82 83 } 84 85 // UIPickerViewのRowが選択された時の挙動 86 func pickerView(_ pickerView: UIPickerView,didSelectRow row: Int, inComponent component: Int) { 87 var comNum = 0 88 //現在選択されているコンポーネント番号取得 89 comNum = pickerView.selectedRow(inComponent: 0) 90 label.text = todou[row] 91 switch comNum { 92 case 1: 93 print("更新") 94 pickerView.reloadComponent(1) 95 default: 96 print("default") 97 } 98 99 } 100 101}
回答1件
あなたの回答
tips
プレビュー