大家好,我一直试图让这个工作多年没有成功,所以道歉,如果这对你们来说似乎很容易。
我想使用3轮UIPickerView - 第1轮didSelectRow值将用于更改剩余两个轮子的阵列,但它们将与转换应用程序相同。
当填充轮子说Anyobject与String不相同时,似乎给我一个错误。我看不出有任何错误,但我知道这是我错过的基本内容。
任何指针都会非常感激。
Motty。
// ViewController.swift
// picker test
import UIKit
class ViewController: UIViewController, UIPickerViewDelegate {
@IBOutlet weak var picker1Label: UILabel!
@IBOutlet weak var picker2Label: UILabel!
@IBOutlet weak var bigPicker: UIPickerView!
var wheelContents = []
var length = ["metres","feet","yards","inches","mm","cm","miles"]
var volume = ["m3","US Gall","Imp Gall","Barrels", "cubic FT","litres"]
var conType = ["length","volume"]
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
wheelContents = [conType,length,length]
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
//For main selection of type of conversion
// returns the number of 'columns' to display.
func numberOfComponentsInPickerView(bigPicker: UIPickerView) -> Int{
return wheelContents.count
}
// returns the # of rows in each component..
func pickerView(bigPicker: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
return wheelContents[component].count
}
func pickerView(bigPicker: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String!{
return wheelContents[component][row]
}
}
答案 0 :(得分:1)
你需要告诉Swift你的wheelContents
数组是一个String
数组的数组:
var wheelContents:[[String]] = []
如果您没有明确指定wheelContents
类型,Swift会将其推断为NSArray
,这会给您带来问题。
答案 1 :(得分:1)
你需要说swift,你的wheelContents
是一个String数组的数组:
var wheelContents:[[String]] = []
此外,您应该将pickerView
的委托设置为self
,因为您在班级中处理了委托。否则功能将无法正常工作:
//In the viewDidLoad method
bigPicker.delegate = self
答案 2 :(得分:1)
由于你声明了wheelContents这样的wheelContents = []
,而没有指定它的元素类型,编译器会自动推断出它是AnyObjects的数组[AnyObject]
。
这就是为什么当你返回wheelContents[component].count
时会产生错误的原因:那时编译器期待String!
,但你提供的是AnyObject
。< / p>
这是一个非常简单的修复方法,您应该在声明它时指定数组的内容。 (它是一组字符串数组,也就是[[String]]
)
答案 3 :(得分:0)
您需要在viewDidLoad中设置pickerView的数据源以及委托
pickerView.dataSource = self