按钮点击swift 1.2更新选择器值

时间:2015-11-08 11:06:09

标签: ios swift

我有一个工作选择器视图,其中包含以下代码行

@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的新手,不知道如何实现这个,有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:0)

问题是您有两个选择器视图。问题的根源是这些方面:

override func viewDidLoad() {
    super.viewDidLoad()
    myPicker = UIPickerView() // this is the problem
    myPicker.dataSource = self
    myPicker.delegate = self
}

您正在将myPicker设置为您在该行中创建的全新且不同的UIPickerView(我已用注释标记的那个)。这是您界面中已有的选择器视图(您在故事板中设置的那个)。而且你永远不会将这个一个放入界面。因此:

  • 界面中的选择器视图不受所有代码的影响;接口中的那个永远不会获得数据源,永远不会获得委托,也不会重新加载任何内容。

  • 您在这些行中创建的选择器视图会执行所有这些操作,但它不在界面中,因此您不会看到它执行任何操作。

    < / LI>