如何在以编程方式创建的 UIPicker Delegate 中返回选定的值
Posted
技术标签:
【中文标题】如何在以编程方式创建的 UIPicker Delegate 中返回选定的值【英文标题】:How to return selected value in UIPickerDelegate when created programatically 【发布时间】:2016-09-08 12:33:39 【问题描述】:我有一个viewController
,上面有一堆输入。其中一些是普通文本,但有些需要选择器的输入。我决定将每个PickerDelegate
和PickerDataSource
的实现移动到一个单独的文件中,以使事情变得更简洁。数据正在出现,但在选择 Picker 时,我不知道如何让事件在我的 viewController 中触发。目前它只在 PickerDelete 类中触发。
一些基本的布局信息是
class MyClass: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource
let jobTypePickerValues = ["value1", "value2"]
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int
return 1
// returns the # of rows in each component..
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
return jobTypePickerValues.count
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
return jobTypePickerValues[row]
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
//println("I want this in the view controller that set up the picker")
在显示选择器的视图控制器中,我有以下内容
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
myClassSource = MyClass()
pickerView = UIPickerView()
pickerView.dataSource = myClassSource
pickerView.delegate = myClassSource
// set the input view of the job type to be a picker view
textInput.inputView = pickerView
textInput.text = jobTypePickerValues[0]
【问题讨论】:
你可以让你的 MyClass 自定义委托,可以在你的视图控制器类中调用。这将解决问题 【参考方案1】:您需要创建一个自定义委托并在您创建pickerView 的ViewController
中实现。
protocol CustomPickerDelegate
func selectedItem(item: String)
现在在MyClass
中创建此协议的实例并在`ViewController` 中实现
class MyClass: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource
let jobTypePickerValues = ["value1", "value2"]
var delegate: CustomPickerDelegate?
.. Other code and methods
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
delegate?. selectedItem(jobTypePickerValues[row])
现在在viewDidLoad
中设置delegate,实现protocol的方法。
class ViewController: UIViewController, CustomPickerDelegate
override func viewDidLoad()
super.viewDidLoad()
myClassSource = MyClass()
myClassSource.delegate = self
pickerView = UIPickerView()
pickerView.dataSource = myClassSource
pickerView.delegate = myClassSource
// set the input view of the job type to be a picker view
textInput.inputView = pickerView
textInput.text = jobTypePickerValues[0]
func selectedItem(item: String)
textInput.text = item
【讨论】:
谢谢这回答了我的问题,但我想我需要在 MyClass 类中添加,我必须为更改事件添加侦听器,然后调用看起来像这样的委托方法 'func pickerView(pickerView :UIPickerView,didSelectRow 行:Int,inComponent 组件:Int)委托? selectedItem("这正在被发送到 ViewController") ' @Matt 是的,我忘了添加代码delegate?. selectedItem("this is being sent to the ViewController")
但除此之外没有问题。
欢迎马特,快乐编码:)
能否请您也投票,以便对其他人也有帮助:)以上是关于如何在以编程方式创建的 UIPicker Delegate 中返回选定的值的主要内容,如果未能解决你的问题,请参考以下文章
如何在以编程方式创建实体时设置 NSManagedObjectModel 的配置。
如何在以编程方式创建的 UIButton 上添加 padding-left?
在以编程方式创建的 UICollectionView 中未调用 didDeselectItemAtIndexPath 函数