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

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

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

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

Swift

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

Q&A

1回答

1613閲覧

ドラムロール式の選択

smawe

総合スコア0

Xcode

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

Swift

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

0グッド

0クリップ

投稿2021/09/17 01:49

以下の内容でドラムロール式の西暦選択をできるようにしました。しかし、現在までの西暦を選択したいようにしたいのですがどのようにしたらいいのかわかりません。具体的には現在の西暦−6年程度から選択できるようにしたいです。つまり現在は2021年なので2015ー2021の間から選択。翌年は2016ー2022の間より選択可能というようにしたいです。教えていただけると幸いです。

swift

1class newacc: UIViewController,UINavigationControllerDelegate,UITextFieldDelegate, UIPickerViewDelegate, UIPickerViewDataSource { 2 // ピッカービューの列数 3 func numberOfComponents(in pickerView: UIPickerView) -> Int { 4 return 1 5 } 6 7 // ピッカービューの行数 8 func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 9 return list.count 10 } 11 12 // ピッカービューに表示する内容 13 func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 14 return list[row] 15 } 16 17 @IBOutlet weak var year1: UITextField! 18 19 let pickerView = UIPickerView() 20 let list: [String] = ["2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019","2020","2021","2022","2023","2024","2025","2026","2027","2028","2029"] 21 22 override func viewDidLoad() { 23 super.viewDidLoad() 24 25 picker() 26} 27 28 29 func picker(){ 30 31 32 // ピッカー設定 33 pickerView.delegate = self 34 pickerView.dataSource = self 35 36 // 決定・キャンセル用ツールバーの生成 37 let toolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 35)) 38 let spaceItem = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil) 39 let doneItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(done)) 40 let cancelItem = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(cancel)) 41 toolbar.setItems([cancelItem, spaceItem, doneItem], animated: true) 42 43 // インプットビュー設定 44 year1.inputView = pickerView 45 year1.inputAccessoryView = toolbar 46 47 // デフォルト設定 48 pickerView.selectRow(10, inComponent: 0, animated: false) 49 50 51 } 52 53 54 @objc func done() { 55 year1.endEditing(true) 56 year1.text = "(list[pickerView.selectedRow(inComponent: 0)])" 57 } 58 // キャンセルボタンのアクション指定 59 @objc func cancel(){ 60 year1.endEditing(true) 61 } 62

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

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

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

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

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

hoshi-takanori

2021/09/17 03:47

まず、 ・今年が西暦何年かを求める方法 ・今年が 2021 年として、2016 〜 2021 の配列を作る方法 はそれぞれ分かりますか? それが分かれば、あとは組み合わせるだけですね。
smawe

2021/09/18 04:18

Calendar.current.component(.year, from: Date())で今年が西暦何年かを求めることはできました。 全然綺麗ではありませんが let list : [Int] = [Calendar.current.component(.year, from: Date()) - 1, Calendar.current.component(.year, from: Date()) - 2, Calendar.current.component(.year, from: Date()) - 3] ひとまずこれで求めました。しかし、実行してみるとドラムロールに表示される文字が「?」になってしまいます。選択をすると西暦自体は選択できます。問題としては private func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: UIView) -> Int? { return list[row] } この部分な気がするのですがいまいちわかりません。 教えていただけると幸いです。
guest

回答1

0

まず、6 年前から今年までの年号を求めるには次のようにします。
(なお、Calendar.current だと iOS の設定で和暦を使うようになってると -3 〜 3 になってしまうので、西暦を求めるために Calendar(identifier: .gregorian) を使ってます。)

swift

1 let list: [Int] = { 2 let year = Calendar(identifier: .gregorian).component(.year, from: Date()) 3 return Array(year-6...year) 4 }()

また、list を Int の配列にした場合、表示の際には文字列に変換する必要があります。

swift

1 // ピッカービューに表示する内容 2 func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 3 return "(list[row])" // または String(list[row]) 4 }

投稿2021/09/19 02:41

hoshi-takanori

総合スコア7901

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問