以编程方式创建和显示 UIPickerView
Posted
技术标签:
【中文标题】以编程方式创建和显示 UIPickerView【英文标题】:Programmatically Create and Show UIPickerView 【发布时间】:2014-07-19 03:14:14 【问题描述】:我正在尝试以编程方式创建 UIPickerView 并将其显示为文本字段的 firstResponder,但是,选择器视图未显示。 textField 已连接到界面构建器中的对象,但 pickerView 是以编程方式创建的。
class View: UIViewController
@IBOutlet var picker : UIPickerView = UIPickerView.alloc()
@IBOutlet var textField : UITextField = nil
override func viewDidLoad()
super.viewDidLoad()
picker = UIPickerView()
picker.delegate = self
picker.dataSource = self
picker.backgroundColor = UIColor.blackColor()
textField.inputView = picker
extension View: UIPickerViewDataSource
func numberOfComponentsInPickerView(colorPicker: UIPickerView!) -> Int
return 1
func pickerView(pickerView: UIPickerView!, numberOfRowsInComponent component: Int) -> Int
return 5
extension View: UIPickerViewDelegate
func pickerView(pickerView: UIPickerView!, titleForRow row: Int, forComponent component: Int) -> String!
return "Text"
为什么我在运行应用时看不到这个pickerView?
编辑:在扩展中添加断点不会停止程序,它们不会被调用。
【问题讨论】:
在您的viewDidLoad
中,将var picker : UIPickerView = ...
更改为picker = ...
。您正在创建一个本地(和临时)选择器。
我现在在该行上遇到三个错误:一行上的连续语句必须用';'分隔,预期表达式和表达式解析为未使用的左值
如果我删除该行,我会在运行时收到一个致命错误:Can't unwrap optional.none
UIPickerView.alloc()
现在已弃用,只需使用 UIPickerView()
代替
两者都可以通过编程方式创建。这是well documented example in Objective C.
【参考方案1】:
我发现了问题——分配输入视图的代码不包含 self.它应该是
self.textField.inputView = picker
【讨论】:
【参考方案2】:我在尝试在文本字段中单击时显示选择器视图时遇到了同样的问题。我的问题是,出于某种原因,我的 ios 模拟器检查了“连接硬件键盘”。在 iOS 菜单中,转到硬件 -> 键盘并确保未选中“连接硬件键盘”。现在感觉很愚蠢,没有注意到任何键盘在应用程序中弹出几个小时,但希望这将有助于避免其他人的挫败感。
只是想添加一个编辑:在 iOS 模拟器中,您可以尝试切换软件键盘(command+K)这在这种情况下也适用于我,并允许我保持硬件键盘的连接。只是在假设您的代码不正确之前快速检查一下。
【讨论】:
谢谢,解决了我的问题!作为你自己,我花了一些时间弄清楚为什么它不起作用......【参考方案3】:我不确定您为什么看不到选择器。但这是错误的方式。
使用以下方法创建实例:
picker = UIPickerView.alloc()
在 Swift 中:
你应该使用:
picker = UIPickerView()
【讨论】:
我进行了更改,谢谢,但选择器似乎仍然不存在, optional.none 错误仍然存在。以上是关于以编程方式创建和显示 UIPickerView的主要内容,如果未能解决你的问题,请参考以下文章