【发布时间】:2017-05-25 03:16:11
【问题描述】:
我有一个包含三个选择器视图的视图。其中两个选取器视图具有相同的数据,一个编号为 1 到 100 的数组。第三个选取器视图具有一个包含模型铁路轨道制造商列表的数组。我已经使用我在这个网站上找到的方法标记了选择器视图,但是当我运行应用程序时,所有三个选择器视图都有 1 到 100 作为它们的数据。我还从所有选择器视图中控制拖动到视图顶部的黄色圆圈,然后单击 dataSource 和 delegate。如何在一个视图中使用具有不同数据源的多个选取器视图?此外,为了使代码运行,我必须从所有与选择器视图相关的 @IBOutlet 语句中删除 weak。这是一件坏事吗?我对代码比较陌生。谢谢。
import UIKit
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
//MARK: Properties
@IBOutlet var layoutLengthPickerView: UIPickerView!
@IBOutlet var layoutWidthPickerView: UIPickerView!
@IBOutlet var trackPickerView: UIPickerView!
override func viewDidLoad() {
super.viewDidLoad()
layoutLengthPickerView = UIPickerView()
layoutWidthPickerView = UIPickerView()
trackPickerView = UIPickerView()
layoutLengthPickerView.tag = 0
layoutWidthPickerView.tag = 1
trackPickerView.tag = 2
}
let numbers = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "100"]
let manufacturers = ["Atlas True Track", "Atlas Code 100", "Atlas Code 83", "Bachmann Nickel Silver", "Bachmann Steel Alloy", "Kato", "Life-Like Trains Code 100", "LIfe-Like Trains Power-Loc", "Peco Code 100", "Peco Code 83", "Peco Code 75", "Shinohara Code 100", "Shinohara Code 70", "Walthers"]
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if pickerView.tag == 0 {
return numbers[row]
} else if pickerView.tag == 1 {
return numbers[row]
} else if pickerView.tag == 2 {
return manufacturers[row]
}
return ""
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if pickerView.tag == 0 {
return numbers.count
} else if pickerView.tag == 1 {
return numbers.count
} else if pickerView.tag == 2 {
return manufacturers.count
}
return 1
}
}
【问题讨论】:
-
去掉
viewDidLoad中创建新选择器视图的三行。这些台词弄乱了你在故事板中创建的那些。 -
也不要使用
tag,使用pickerView == layoutLengthPickerView之类的东西 -
您还可以拥有一个包含多个组件的选择器。有时拥有多个选择器会导致用户体验混乱。
标签: ios swift uipickerview