Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.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 Swift-选择值后隐藏pickerView_Ios_Swift_Uipickerview - Fatal编程技术网

Ios Swift-选择值后隐藏pickerView

Ios Swift-选择值后隐藏pickerView,ios,swift,uipickerview,Ios,Swift,Uipickerview,我发现了类似的问题,他们的回答也很有帮助,但最后一件事让我束手无策。我试图在点击某个字段时显示一个pickerView,然后在选择数据时,我希望pickerView隐藏。我可以从pickerView中获取要隐藏的数据,但是,pickerView后面仍然有一个灰色矩形。如果我点击屏幕,而不是某个字段或pickerView,则灰色矩形将隐藏,然后在点击下一个字段时重新出现,仅在选择新数据后保留,直到我点击某个空白屏幕 我在下面包含了我的代码,您将看到我已经尝试了几个选项。这些并不是我尝试过的全部,但

我发现了类似的问题,他们的回答也很有帮助,但最后一件事让我束手无策。我试图在点击某个字段时显示一个pickerView,然后在选择数据时,我希望pickerView隐藏。我可以从pickerView中获取要隐藏的数据,但是,pickerView后面仍然有一个灰色矩形。如果我点击屏幕,而不是某个字段或pickerView,则灰色矩形将隐藏,然后在点击下一个字段时重新出现,仅在选择新数据后保留,直到我点击某个空白屏幕

我在下面包含了我的代码,您将看到我已经尝试了几个选项。这些并不是我尝试过的全部,但在几次尝试之后,我开始只是注释掉,而不是删除,这样我就可以记住我做了什么。我是一个非常新的编码,所以我感谢这个网站作为一个资源,并感谢您的帮助

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate {

    @IBOutlet var enterSeason: UITextField!

    @IBOutlet var enterSport: UITextField!

    var dataPickerView = UIPickerView()    
    var season = ["2013", "2014", "2015"] //multi-season
    var sport = ["Baseball", "Football", "Basketball", "Hockey"]
    var activeDataArray = []

    override func viewDidLoad() {
        super.viewDidLoad()

        enterSeason.inputView = dataPickerView
        enterSport.inputView = dataPickerView
        dataPickerView.delegate = self
        dataPickerView.dataSource = self
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func textFieldDidBeginEditing(textField: UITextField) {
        activeDataArray = [] //clear out the clicked field data array
        if textField == enterSeason {
            activeDataArray = season
        } else
            if textField == enterSport {
                activeDataArray = sport
            }
        dataPickerView.reloadAllComponents()
        dataPickerView.hidden = false
    }

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

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return activeDataArray.count
    }

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
        return activeDataArray[row] as! String
    }

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        if activeDataArray == season {
            enterSeason.text = season[row] as String
        }
        else if activeDataArray == sport {
            enterSport.text = sport[row] as String
        }
        //trying to hide the dataPicker
        dataPickerView.hidden = true
        //dataPickerView.reloadAllComponents()
        //self.dataPickerView.resignFirstResponder()
        //self.dataPickerView.frameForAlignmentRect(CGRectMake(0, 900, 375, 219))

    }

    //function to hide data in
    func textFieldShouldReturn(textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }

    //funtion to hide keyboard when screen is tapped
    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
        self.view.endEditing(true)
    }

}
类ViewController:UIViewController、UIPickerViewDeleteGate、UIPickerViewDataSource、UIExtFieldDelegate{
@IbExtfield:UITextField!
@IbExtField!
var dataPickerView=UIPickerView()
var季节=[“2013”、“2014”、“2015”]//多季节
var sport=[“棒球”、“足球”、“篮球”、“曲棍球”]
var activeDataArray=[]
重写func viewDidLoad(){
super.viewDidLoad()
enterSeason.inputView=dataPickerView
enterport.inputView=dataPickerView
dataPickerView.delegate=self
dataPickerView.dataSource=self
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
//处置所有可以重新创建的资源。
}
func textField didbeginediting(textField:UITextField){
activeDataArray=[]//清除单击的字段数据数组
如果textField==输入季节{
activeDataArray=季节
}否则
如果textField==输入运动{
activeDataArray=sport
}
dataPickerView.reloadAllComponents()的
dataPickerView.hidden=false
}
func numberOfComponentsInPickerView(pickerView:UIPickerView)->Int{
返回1
}
func pickerView(pickerView:UIPickerView,numberOfRowsInComponent:Int)->Int{
返回activeDataArray.count
}
func pickerView(pickerView:UIPickerView,titleForRow行:Int,forComponent组件:Int)->字符串{
将activeDataArray[row]返回为!字符串
}
func pickerView(pickerView:UIPickerView,didSelectRow行:Int,不完整组件:Int){
如果activeDataArray==季节{
enterSeason.text=季节[行]作为字符串
}
如果activeDataArray==sport,则为else{
enterport.text=sport[行]作为字符串
}
//试图隐藏数据采集器
dataPickerView.hidden=true
//dataPickerView.reloadAllComponents()的
//self.dataPickerView.resignFirstResponder()的
//self.dataPickerView.frameForAlignmentRect(CGRectMake(0900375219))
}
//用于在中隐藏数据的函数
func textField应返回(textField:UITextField)->Bool{
textField.resignFirstResponder()辞职
返回真值
}
//点击屏幕时隐藏键盘的功能
覆盖func touchesBegined(触摸:设置,withEvent事件:UIEvent){
self.view.endEditing(true)
}
}

如果要隐藏pickerView,请尝试以下操作:

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if activeDataArray == season {
        enterSeason.text = season[row] as String
    }
    else if activeDataArray == sport {
        enterSport.text = sport[row] as String
    }
    //trying to hide the dataPicker
    self.view.endEditing(true)
    //dataPickerView.reloadAllComponents()
    //self.dataPickerView.resignFirstResponder()
    //self.dataPickerView.frameForAlignmentRect(CGRectMake(0, 900, 375, 219))

}

隐藏选择器视图的一种方法是:

self.view.endEditing(true) 

这对我来说很有效。

我尝试辞去didSelectRow中文本字段的第一个响应者

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if activeDataArray == season {
    enterSeason.text = season[row] as String
    enterSeason.resignFirstResponder()
}
else if activeDataArray == sport {
    enterSport.text = sport[row] as String
    enterSport.resignFirstResponder()
}

}

我尝试了你的建议,但有一个错误。建议的修复方法是在
endEditing
和open paren``(`)之间插入一个逗号。当我添加该逗号时,它仍然有一个错误,建议的修复方法是添加另一个逗号,等等,等等。@Greg很抱歉,我忘了您使用的是swift而不是objective cThis works..!在我的情况下..当pickerView处于“活动或打开”状态时我想转到另一个ViewController。谢谢!