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

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

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

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

Swift

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

Q&A

解決済

2回答

1491閲覧

pickerViewの初期値を空白にしたい

yuna_

総合スコア23

Xcode

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

Swift

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

0グッド

0クリップ

投稿2020/07/16 23:16

前提・実現したいこと

簡単なタイマーアプリを作成しています。
pickerViewで、秒数を選択できるようにしました。
そのpickerViewの先頭を空白にしたいのですが、方法がわかりません。。

pixkerViewの選択肢が数字の場合はできないのでしょうか。

ご教示いただけると助かります。

該当のソースコード

swift

1class ViewController: UIViewController,UIPickerViewDelegate, UIPickerViewDataSource{ 2 3 4 @IBOutlet weak var pickerViewA: UIPickerView! 5 @IBOutlet weak var timerLabel: UILabel! 6 @IBOutlet weak var startinvalidButton: UIButton! 7 8 9 var secondsTimer :Float = 0 10 var timer :Timer! 11 var sec :String! 12 13 var numberArray:[Int] = ([Int])(1...20) 14 15 override func viewDidLoad() { 16 super.viewDidLoad() 17 // Do any additional setup after loading the view. 18 19 pickerViewA.delegate = self 20 pickerViewA.dataSource = self 21 22 startinvalidButton.layer.cornerRadius = 5.0 23 24 } 25 26 func numberOfComponents(in pickerView: UIPickerView) -> Int { 27 return 1 28 } 29 30 //pickerviewの選択肢の個数を返す処理 31 func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 32 return numberArray.count 33 } 34 35 //pickerVIewの選択肢として表示する文字列を設定 36 func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 37 return String(numberArray[row]) 38 } 39 40 41} 42

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

Swiftバージョン5

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

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

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

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

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

guest

回答2

0

TsukubaDepotさんとは違うアプローチで。
numberArrayはIntのままで、表示のときに小細工します。

swift

1//0-20で初期化 2var numberArray:[Int] = [Int](0...20)

swift

1func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 2 //0なら何も表示しない 3 return numberArray[row] == 0 ? "" : String(numberArray[row]) 4}

投稿2020/07/17 00:52

fuzzball

総合スコア16731

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

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

yuna_

2020/07/17 06:29

こんな方法があるのですね!勉強になりました! ありがとうございます????????‍♀️!
TsukubaDepot

2020/07/17 06:39

fuzzballさん 私はこの方法は思いつきませんでした。勉強になりました。 yuna_さん 私がベストアンサーをいただいてしまいましたが、どちらが適切かは状況しだいなので、是非両方覚えておいていただければと思います。
yuna_

2020/07/17 09:30

TsukubaDepotさん、ありがとうございます。 いただいた回答双方とも大変参考になるもので、両方をベストアンサーに選びたかったのですが。。改めてありがとうございました。
guest

0

ベストアンサー

numberArray1 から 20 の文字列にしたあと、

Swift

1 var numberArray = ([Int])(1...20).map { String($0) }

viewDidLoad()あたりで先頭に空白を加える方法があるかと思います。

Swift

1 override func viewDidLoad() { 2 super.viewDidLoad() 3 4 numberArray.insert(" ", at: 0)

数値か否かの判定はこんな感じでしょうか。

Swift

1func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 2 guard let num = Int(numberArray[row]) else { 3 print("数値以外") 4 return 5 } 6 7 print("数値: ", num) 8 }

投稿2020/07/16 23:29

TsukubaDepot

総合スコア5086

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

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

yuna_

2020/07/17 06:29

数値判定まで載せてくださり、大変助かりました! 勉強になりました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問