【问题标题】:Programmatically Create and Show UIPickerView以编程方式创建和显示 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.

标签: ios swift uipickerview


【解决方案1】:

我发现了问题——分配输入视图的代码不包含 self.它应该是

self.textField.inputView = picker

【讨论】:

    【解决方案2】:

    我在尝试在文本字段中单击时显示选择器视图时遇到了同样的问题。我的问题是,出于某种原因,我的 iOS 模拟器检查了“连接硬件键盘”。在 iOS 菜单中,转到硬件 -> 键盘并确保未选中“连接硬件键盘”。现在感觉很愚蠢,没有注意到任何键盘在应用程序中弹出几个小时,但希望这将有助于避免其他人的挫败感。

    只是想添加一个编辑:在 iOS 模拟器中,您可以尝试切换软件键盘(command+K)这在这种情况下也适用于我,并允许我保持硬件键盘的连接。只是在假设您的代码不正确之前快速检查一下。

    【讨论】:

    • 谢谢,解决了我的问题!作为你自己,我花了一些时间弄清楚为什么它不起作用......
    【解决方案3】:

    我不确定您为什么看不到选择器。但这是错误的方式。

    使用以下方法创建实例:

     picker = UIPickerView.alloc()
    

    在 Swift 中:

    你应该使用:

    picker = UIPickerView()
    

    【讨论】:

    • 我进行了更改,谢谢,但选择器似乎仍然不存在, optional.none 错误仍然存​​在。
    猜你喜欢
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多