★ PickerViewの選択している線を消す(以下の処理はタイミングも重要、レイアウトが決まる前に実行するとクラッシュする)
※ iOS7以降はshowsSelectionIndicator
が動かないのでその対応
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
if picker.subviews.count >= 3 {
picker.subviews[1].isHidden = true
picker.subviews[2].isHidden = true
}
}
★ 3列のPickerViewを作成する
import UIKit
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
@IBOutlet weak var pickerView: UIPickerView!
var array1 = ["AAA","BBB","CCC","DDD","EEE","FFF","GGG"]
var array2 = ["0","1","2","3","4","5","6","7","8"]
var array3 = ["6/25","6/26","6/27","6/28","6/29","6/30","7/1"]
override func viewDidLoad() {
super.viewDidLoad()
}
// 表示列
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 3
}
// 表示行
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
switch component {
case 0 : return array1.count
case 1 : return array2.count
case 2 : return array3.count
default: return 0
}
}
// 各ラベルの幅
func pickerView(_ pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat {
let screenWidth = UIScreen.main.bounds.size.width
switch component {
case 0 : return screenWidth * 0.35
case 1 : return screenWidth * 0.2
case 2 : return screenWidth * 0.45
default: return 0
}
}
//表示内容
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
switch component {
case 0 : return array1[row]
case 1 : return array2[row]
case 2 : return array3[row]
default: return nil
}
}
//選択時
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
print("列: \(component)")
print("値: \(row)")
}
}
import UIKit
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
@IBOutlet weak var myPicker: UIPickerView!
var array1 = ["AAA", "BBB", "CCC", "DDD", "EEE", "FFF", "GGG"]
var array2 = ["0", "1", "2", "3", "4", "5", "6", "7", "8"]
var array3 = ["6/25", "6/26", "6/27", "6/28", "6/29", "6/30", "7/1"]
var dataArray: Array<Array<String>>!
override func viewDidLoad() {
super.viewDidLoad()
dataArray = [array1, array2, array3]
}
// 表示列
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 3
}
// 表示行
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return dataArray[component].count
}
// 各ラベルの幅
func pickerView(pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat {
let screenWidth = UIScreen.mainScreen().bounds.size.width
switch component {
case 0 : return screenWidth * 0.35
case 1 : return screenWidth * 0.2
case 2 : return screenWidth * 0.45
default: return 0
}
}
//表示内容
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return dataArray[component][row]
}
//選択時
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
print("列: \(row) 値: \(dataArray[component][row])")
}
}
★ カスタムViewを生成してPickerに表示する
import UIKit
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
@IBOutlet weak var pickerView: UIPickerView!
var dataArray = ["Font 1","Font 2","Font 3"]
var fontArray = ["Zapfino","DBLCDTempBlack","MarkerFelt-Thin"]
override func viewDidLoad() {
super.viewDidLoad()
pickerView.delegate = self
pickerView.dataSource = self
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return dataArray.count
}
func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView {
// 表示するラベルを生成する
let label = UILabel(frame: CGRect(x: 0, y: 0, width: UIScreen.mainScreen().bounds.size.width, height: 50))
label.textAlignment = .Center
label.text = dataArray[row]
label.font = UIFont(name: fontArray[row],size:16)
return label
}
// Picker選択時
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
print("value : \(dataArray[row])")
}
}