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

标签 ios swift uiview picker

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

但我有一些问题。我在单独的 View 中创建选择器,然后在选项卡 View 中调用该 View 并使用它。

但我不知道如何设置数据。如果我在 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 文件)中创建一个 View 并 使用 Tab1ViewController 连接委托(delegate)和数据源。

尽管如此,在此代码中,我们将在 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]
    }
}

关于iOS-当我使用 uiview 到 uiviewcontroller 时如何设置选择器数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42085211/

相关文章:

iOS Firebase - 在模拟器中崩溃但不是设备 w/persistence

ios - 在 CallKit UI 中隐藏 FaceTime 按钮

android - 应用程序关闭时从通知中心/面板删除推送通知

swift - Bootstrap for Swift 或其他使布局更容易的东西

swift - 如何在正确的坐标中快速将文本写入图像

ios - 如何在导航栏上添加 UIView?

iphone - 添加新按钮时旧按钮消失

swift - 仅当触摸位于自定义形状内时,如何使 UIScrollView 可滚动?

ios - 我无法在 Xcode 12 的 xib 中创建自定义 UIView

ios - 单个 Viewcontroller 中的多个 UITableview