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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

Q&A

解決済

1回答

945閲覧

PickerViewのタイトルがセットできない

退会済みユーザー

退会済みユーザー

総合スコア0

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

0グッド

0クリップ

投稿2020/01/19 12:18

編集2020/01/19 12:22

前提・実現したいこと

SwiftでPickerViewを使ってみようと思い、このサイトに載っていたコードを動かしてみたのですが、
「ドラムロール各タイトル」の「list[row]」のところでエラーが出ます。

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

Use of unresolved identifier 'list'

該当のソースコード

swift

1import UIKit 2 3class ViewController: UIViewController { 4 @IBOutlet weak var textField: UITextField! 5 6 var pickerView: UIPickerView = UIPickerView() 7 let list: [String] = ["メインクーン", "シャム", "ロシアンブルー", "アメリカンショートヘア", "ネベロング", "ビクシーボブ", "ラガマフィン", "ラパーマ"] 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 12 // ピッカー設定 13 pickerView.delegate = self 14 pickerView.dataSource = self 15 pickerView.showsSelectionIndicator = true 16 17 // 決定バーの生成 18 let toolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 35)) 19 let spacelItem = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil) 20 let doneItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(done)) 21 toolbar.setItems([spacelItem, doneItem], animated: true) 22 23 // インプットビュー設定 24 textField.inputView = pickerView 25 textField.inputAccessoryView = toolbar 26 } 27 28 // 決定ボタン押下 29 @objc func done() { 30 textField.endEditing(true) 31 textField.text = "(list[pickerView.selectedRow(inComponent: 0)])" 32 } 33} 34 35extension ViewController : UIPickerViewDelegate, UIPickerViewDataSource { 36 37 // ドラムロールの列数 38 func numberOfComponents(in pickerView: UIPickerView) -> Int { 39 return 1 40 } 41 42 // ドラムロールの行数 43 func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 44 /* 45 列が複数ある場合は 46 if component == 0 { 47 } else { 48 ... 49 } 50 こんな感じで分岐が可能 51 */ 52 return list.count 53 } 54 55 // ドラムロールの各タイトル 56 func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 57 /* 58 列が複数ある場合は 59 if component == 0 { 60 } else { 61 ... 62 } 63 こんな感じで分岐が可能 64 */ 65 return list[row] 66 } 67 68 /* 69 // ドラムロール選択時 70 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 71 self.textField.text = list[row] 72 } 73 */ 74} 75 76import UIKit 77 78class ViewController: UIViewController { 79 @IBOutlet weak var textField: UITextField! 80 81 var pickerView: UIPickerView = UIPickerView() 82 let list: [String] = ["メインクーン", "シャム", "ロシアンブルー", "アメリカンショートヘア", "ネベロング", "ビクシーボブ", "ラガマフィン", "ラパーマ"] 83 84 override func viewDidLoad() { 85 super.viewDidLoad() 86 87 // ピッカー設定 88 pickerView.delegate = self 89 pickerView.dataSource = self 90 pickerView.showsSelectionIndicator = true 91 92 // 決定バーの生成 93 let toolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 35)) 94 let spacelItem = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil) 95 let doneItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(done)) 96 toolbar.setItems([spacelItem, doneItem], animated: true) 97 98 // インプットビュー設定 99 textField.inputView = pickerView 100 textField.inputAccessoryView = toolbar 101 } 102 103 // 決定ボタン押下 104 @objc func done() { 105 textField.endEditing(true) 106 textField.text = "(list[pickerView.selectedRow(inComponent: 0)])" 107 } 108} 109 110extension ViewController : UIPickerViewDelegate, UIPickerViewDataSource { 111 112 // ドラムロールの列数 113 func numberOfComponents(in pickerView: UIPickerView) -> Int { 114 return 1 115 } 116 117 // ドラムロールの行数 118 func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 119 /* 120 列が複数ある場合は 121 if component == 0 { 122 } else { 123 ... 124 } 125 こんな感じで分岐が可能 126 */ 127 return list.count 128 } 129 130 // ドラムロールの各タイトル 131 func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 132 /* 133 列が複数ある場合は 134 if component == 0 { 135 } else { 136 ... 137 } 138 こんな感じで分岐が可能 139 */ 140 return list[row] 141 } 142 143 /* 144 // ドラムロール選択時 145 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 146 self.textField.text = list[row] 147 } 148 */ 149}

試したこと

// ドラムロールの各タイトル func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { /* 列が複数ある場合は if component == 0 { } else { ... } こんな感じで分岐が可能 */      let list: [String] = ["メインクーン", "シャム", "ロシアンブルー", "アメリカンショートヘア", "ネベロング", "ビクシーボブ", "ラガマフィン", "ラパーマ"] return list[row] }

このようにエラーの箇所の直前でリストを定義すればエラーは消えましたが、シミュレーターではPickerViewに
何も表示されません。やはりドラムロールにタイトルが設定されていないのだと思います。¥コピペのため「list[row]」の意味もよく理解していない状態ですが、エラーの解決方法を教えていただきたいです。
よろしくお願いします。

追記

} extension ViewController : UIPickerViewDelegate, UIPickerViewDataSource {

真ん中のこの部分を消してclassとextensionをくっつけてみました。
エラーは消えたもののドラムロールに何も表示されないことに変わりはありません。

補足情報(FW/ツールのバージョンなど)

Xcode Version 11.3.1 (11C504)
Swift 5
MacOS 10.15.2

iOS 13.3 (シミュレーター環境)

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

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

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

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

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

guest

回答1

0

ベストアンサー

Swift

1class ViewController: UITableViewController, UIPickerViewDelegate, UIPickerViewDataSource {

追記に書いた箇所を削除した上で「UIPickerViewDelegate, UIPickerViewDataSource」を書き足せば
ちゃんと動きました。

投稿2020/01/19 12:31

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問