UIPickerView显示空的灰色框Swift

Gre*_*ory 2 uipickerview ios swift

我没有很多代码,所以我最好在这里复制它。

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource{

    var buildings = ["BankBuilding", "Cinema" , "CornerShop", "Greg's House"]

    @IBOutlet weak var buildText: UITextField!

    var buildPickers:UIPickerView = UIPickerView()

    override func viewDidLoad() {
        super.viewDidLoad()

        buildPickers = UIPickerView()
        buildPickers.delegate = self
        buildPickers.hidden = true;
        buildText.inputView = buildPickers
        buildText.text = buildings[0]        
    }

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int{
        return 1
    }

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
        println("Count: \(buildings.count)")
        return buildings.count
    }

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
        println("creating title: \(buildings[row])")
        return buildings[row]
    }

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
    {
        println("Selected: \(buildings[row])")
        buildText.text = buildings[row]
        buildPickers.hidden = true;
    }

    func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
        buildPickers.hidden = false
        return false
    }
}
Run Code Online (Sandbox Code Playgroud)

打印语句正确。对于numberOfRows...titleForRow它正在打印正确的字符串。

但是没有任何印刷品,didSelectRow因为我不能选择一行。

这是我得到的:

在此处输入图片说明

您可以在后台忽略Google Map,它不会干扰Picker View,而只是在StoryBoard中进行设置。

当我单击textField时,出现灰色窗口,但从不显示任何内容。但是印刷声明却相反。

有谁知道为什么会这样吗?

Dha*_*esh 5

只需在您的viewDidLoad方法中添加以下行:

buildPickers.dataSource = self
Run Code Online (Sandbox Code Playgroud)

您的代码将是:

override func viewDidLoad() {
    super.viewDidLoad()

    buildPickers = UIPickerView()
    buildPickers.delegate = self
    buildPickers.dataSource = self
    buildPickers.hidden = true;
    buildText.inputView = buildPickers
    buildText.text = buildings[0]        
}
Run Code Online (Sandbox Code Playgroud)

它将显示您的数据。

更新:

它未显示,因为您将其设置为隐藏在viewDidLoad

只需从代码中删除此行:

buildPickers.hidden = true
Run Code Online (Sandbox Code Playgroud)

这是您的工作代码:

import UIKit

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate{

    var buildings = ["BankBuilding", "Cinema" , "CornerShop", "Greg's House"]

    @IBOutlet weak var buildText: UITextField!

    var buildPickers:UIPickerView = UIPickerView()

    override func viewDidLoad() {
        super.viewDidLoad()

        buildPickers = UIPickerView()
        buildPickers.delegate = self
        buildPickers.hidden = true
        buildText.delegate = self        //set delegate for textField
        buildText.inputView = buildPickers
        buildText.text = buildings[0]
    }

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int{
        return 1
    }

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
        println("Count: \(buildings.count)")
        return buildings.count
    }

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
        println("creating title: \(buildings[row])")
        return buildings[row]
    }

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
    {
        println("Selected: \(buildings[row])")
        buildText.text = buildings[row]
        buildPickers.hidden = true;
    }


    //this method will call when you click on textField
    func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
        buildPickers.hidden = false
        return true
    }
}
Run Code Online (Sandbox Code Playgroud)