我使用Xcode 8和swift 2.3,但是UIPickerView.dataSource = (self as! UIPickerViewDataSource)当我尝试使用func时,我遇到了一个问题UIPicker,这是我的代码:
import UIKit
class ViewController: UIViewController {
let Num = ["1","2","3","4","5","6"]
@IBOutlet weak var UIPicker: UIPickerView!
override func viewDidLoad() {
super.viewDidLoad()
func numberOfRows(inComponent component: Int) -> Int {return 1}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {return Num.count}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {return Num[row]}
UIPicker.dataSource = (self as! UIPickerViewDataSource)
UIPicker.delegate = (self as! UIPickerViewDelegate)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行我的代码时,Xcode警告代码:
无法将'test.ViewController'类型的值(0x1000bd8c0)转换为'UIPickerViewDataSource'(0x1ab289738).2016-06-29 15:33:35.079300 test [474:98176]无法将'test.ViewController'类型的值(0x1000bd8c0)转换为'UIPickerViewDataSource'(0x1ab289738).
添加UIPickerViewDataSource和UIPickerViewDelegate到类声明:
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate
Run Code Online (Sandbox Code Playgroud)
并且不要使用类型转换self:
override func viewDidLoad() {
super.viewDidLoad()
UIPicker.dataSource = self
UIPicker.delegate = self
}
Run Code Online (Sandbox Code Playgroud)
此外,您必须将方法移出viewDidLoad功能,并纠正它们:
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {return 1}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {return Num.count}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {return Num[row]}
Run Code Online (Sandbox Code Playgroud)
请注意,我强烈建议您将您的Num和UIPicker属性重命名为num和picker,因此您不会将它们与类名混合
更新:完整ViewController代码:
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
let Num = ["1","2","3","4","5","6"]
@IBOutlet weak var UIPicker: UIPickerView!
override func viewDidLoad() {
super.viewDidLoad()
UIPicker.dataSource = self
UIPicker.delegate = self
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {return 1}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {return Num.count}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {return Num[row]}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4606 次 |
| 最近记录: |