iOS - 当我使用 uiview 到 uiviewcontroller 时如何设置选择器数据

iOS - how to set picker data when I use uiview to uiviewcontroller

大家好,我正在尝试制作一些我需要的实用程序,例如 Pokedex kk

但我遇到了一些问题。我在单独的视图中创建选择器,然后在 tabview 中调用该视图并使用它。

但是不知道怎么设置数据。如果我在 uiviewcontroller 中创建选择器,我可以在 didload? 方法中设置数据,但在 uiview 中没有我可以设置的 didload 方法。

这是我的代码

SelectPoke.swift

class SelectPoke: UIView , UIPickerViewDelegate , UIPickerViewDataSource{
@IBOutlet var textField: UITextField!

var data =  ["1","2","3"]
var picker = UIPickerView()

public func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 1
}

public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
    return data.count
}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    textField.text = data[row]
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    return data[row]
}

func h(){
    picker.delegate = self
    picker.dataSource = self
}

override func awakeFromNib() {
    h()
}

class func instanceFromNib() -> UIView {
    return UINib(nibName: "SelectPoke", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! UIView
}

}

Tab1ViewController.swift

class Tab1ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()


    let sideView = SelectPoke.instanceFromNib()
    sideView.frame = self.view.frame

    self.view.addSubview(sideView)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

请帮助我。我的宝可梦在等你..

通常,您不会子类化 UIPickerView,而是在 Storyboard(或 XIB-file)中创建一个视图,然后 将委托和数据源与 Tab1ViewController.

连接起来

然而,在这段代码中,我们将在 viewDidLoad 中创建一个新的 UIPickerView,以保持代码与原始问题相似

备注:目前我没有Xcode运行,所以这个代码示例中可能会有小语法错误

 class Tab1ViewController: UIViewController, UIPickerViewDelegate , UIPickerViewDataSource {

    var data =  ["1","2","3"]

    override func viewDidLoad() {
        super.viewDidLoad()

        let sideView = UIPickerView()
        sideView.frame = self.view.frame

        self.view.addSubview(sideView)
        sideView.delegate = self
        sideView.dataSource = self

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    public func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
        return data.count
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        textField.text = data[row]
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return data[row]
    }
}