我有一个工作选择器视图,其中包含以下代码行
@IBOutlet var myPicker: UIPickerView!
var colors: [String] = ["red","green","blue"]
override func viewDidLoad() {
super.viewDidLoad()
myPicker = UIPickerView()
myPicker.dataSource = self
myPicker.delegate = self
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return colors.count
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
return colors[row] as! String
}
我有一个按钮,当我点击我想要删除所有旧值(红色,绿色和蓝色)并使用新值(黄色,黑色)更新
func buttonClicked(sender: UIButton!) {
var btn:UIButton = sender;
colors = ["yellow", "black”]
myPicker.reloadAllComponents()
}
但不幸的是上面的代码没有用,我是swift的新手,不知道如何实现这个,有人可以帮我这个吗?
答案 0 :(得分:0)
问题是您有两个选择器视图。问题的根源是这些方面:
override func viewDidLoad() {
super.viewDidLoad()
myPicker = UIPickerView() // this is the problem
myPicker.dataSource = self
myPicker.delegate = self
}
您正在将myPicker
设置为您在该行中创建的全新且不同的UIPickerView(我已用注释标记的那个)。这是不您界面中已有的选择器视图(您在故事板中设置的那个)。而且你永远不会将这个一个放入界面。因此:
界面中的选择器视图不受所有代码的影响;接口中的那个永远不会获得数据源,永远不会获得委托,也不会重新加载任何内容。
您在这些行中创建的选择器视图会执行所有这些操作,但它不在界面中,因此您不会看到它执行任何操作。
< / LI>