如何从具有多个组件的 pickView 中获取确切的值
How to get the exact value from pickView with multiple component
我有一个 PickerView 和一个像这样的标签:
我想,当我更改组件中每一行的值时,它会将值分配给上面的标签。
例如:当我在第一个组件中选择 "Blue" 并在第二个组件中选择 "Two" 时,它会将 "Blue Two" 分配给标签。
我试过这样,但效果不佳,当我 select 第二个组件中的第六个值时它会崩溃:
import UIKit
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
@IBOutlet var colorLabel: UILabel!
let colors = ["Red", "Green", "Blue", "Black", "White"]
let numbers = ["One", "Two", "Three", "Four" ,"Five", "Six", "Seven"]
var array = [[String]]()
override func viewDidLoad() {
super.viewDidLoad()
array = [colors, numbers]
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return array.count
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return array[component].count
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return array[component][row]
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
colorLabel.text = component == 0 ? array[component][row] + " " + array[component][row] : array[component][row] + " " + array[component][row]
}
}
我在 ViewController
的顶部添加了这些行
var colorString = ""
var numberString = ""
并像这样更改 didSelectRow 函数:
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if component == 0 {
colorString = array[component][row]
} else {
numberString = array[component][row]
}
resultLabel.text = colorString + " " + numberString
}
现在运行良好。
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
var selectedValueFirstRow = pickerView.selectedRowInComponent(0)
var selectedValueSecondRow = pickerView.selectedRowInComponent(1)
colorLabel.text = colors[selectedValueFirstRow] + " " + numbers[selectedValueSecondRow]
}
您的代码正在崩溃,因为它超出了第一个数组的索引
我有一个 PickerView 和一个像这样的标签:
我想,当我更改组件中每一行的值时,它会将值分配给上面的标签。
例如:当我在第一个组件中选择 "Blue" 并在第二个组件中选择 "Two" 时,它会将 "Blue Two" 分配给标签。
我试过这样,但效果不佳,当我 select 第二个组件中的第六个值时它会崩溃:
import UIKit
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
@IBOutlet var colorLabel: UILabel!
let colors = ["Red", "Green", "Blue", "Black", "White"]
let numbers = ["One", "Two", "Three", "Four" ,"Five", "Six", "Seven"]
var array = [[String]]()
override func viewDidLoad() {
super.viewDidLoad()
array = [colors, numbers]
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return array.count
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return array[component].count
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return array[component][row]
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
colorLabel.text = component == 0 ? array[component][row] + " " + array[component][row] : array[component][row] + " " + array[component][row]
}
}
我在 ViewController
的顶部添加了这些行var colorString = ""
var numberString = ""
并像这样更改 didSelectRow 函数:
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if component == 0 {
colorString = array[component][row]
} else {
numberString = array[component][row]
}
resultLabel.text = colorString + " " + numberString
}
现在运行良好。
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
var selectedValueFirstRow = pickerView.selectedRowInComponent(0)
var selectedValueSecondRow = pickerView.selectedRowInComponent(1)
colorLabel.text = colors[selectedValueFirstRow] + " " + numbers[selectedValueSecondRow]
}
您的代码正在崩溃,因为它超出了第一个数组的索引