Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIPickerView显示空灰色框Swift_Ios_Swift_Uipickerview - Fatal编程技术网

Ios UIPickerView显示空灰色框Swift

Ios UIPickerView显示空灰色框Swift,ios,swift,uipickerview,Ios,Swift,Uipickerview,我没有太多的代码,所以我不妨把它复制到这里 class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource{ var buildings = ["BankBuilding", "Cinema" , "CornerShop", "Greg's House"] @IBOutlet weak var buildText: UITextField! var buildP

我没有太多的代码,所以我不妨把它复制到这里

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
    }
}
打印语句是正确的。对于
numberOfRows…
titleForRow
它正在打印正确的字符串

但是没有打印
didSelectRow
,因为我无法选择行

这就是我得到的:

您可以忽略背景中的Google地图,它不应该干扰Picker视图,并且只是在故事板中设置的

单击文本字段时会出现灰色窗口,但不会显示任何内容。但印刷版的声明并非如此


有人知道为什么会这样吗

只需在您的
viewDidLoad
方法中添加这一行:

buildPickers.dataSource = self
您的代码将是:

override func viewDidLoad() {
    super.viewDidLoad()

    buildPickers = UIPickerView()
    buildPickers.delegate = self
    buildPickers.dataSource = self
    buildPickers.hidden = true;
    buildText.inputView = buildPickers
    buildText.text = buildings[0]        
}
它会显示你的数据

更新:

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

只需从代码中删除这一行:

buildPickers.hidden = true
这是您的工作代码:

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
    }
}

是否在文本字段中设置了代理?您是否收到用于取消隐藏选取器的回调?

我已经将其放入,我尝试将其取出。。。不幸的是,这没什么区别!这就解决了。。。但是
textField中的
buildPickers.hidden=false
行不应该解决这个问题吗?这个方法没有调用,你可以设置断点并检查。因为你没有为这个textField设置委托。很高兴帮助你……)我不完全确定你的意思。一切都在上面粘贴的代码中。您必须使用故事板来设置地图等。?您可能已经在其中设置了文本字段委托。textView与mapView AFAIK没有连接。如果有帮助,文本视图在最初加载视图时会正确更新-
buildText.text=buildings[0]