以编程方式创建和显示 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的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式创建和显示 UIBarButtonItem 的正确方法是啥?

以编程方式创建页面控件不显示

以编程方式创建的视图不显示

UIImageView(以编程方式创建)未显示

允许在以模式方式显示的以编程方式创建的视图内自动旋转

以编程方式创建的 rootviewcontroller 未显示分配的 viewcontroller 的内容