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]
}
}
大家好,我正在尝试制作一些我需要的实用程序,例如 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]
}
}