Swift - 选择值后隐藏pickerView [英] Swift - hide pickerView after value selected

查看:24
本文介绍了Swift - 选择值后隐藏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"]//多季节var sport = [棒球"、足球"、篮球"、曲棍球"]var activeDataArray = []覆盖 func viewDidLoad() {super.viewDidLoad()enterSeason.inputView = dataPickerViewenterSport.inputView = dataPickerViewdataPickerView.delegate = selfdataPickerView.dataSource = self}覆盖 func didReceiveMemoryWarning() {super.didReceiveMemoryWarning()//处理任何可以重新创建的资源.}func textFieldDidBeginEditing(textField: UITextField) {activeDataArray = []//清除点击的字段数据数组如果 textField == enterSeason {activeDataArray = 季节} 别的如果 textField == enterSport {activeDataArray = 运动}dataPickerView.reloadAllComponents()dataPickerView.hidden = false}func numberOfComponentsInPickerView(pickerView: UIPickerView) ->整数{返回 1}func pickerView(pickerView: UIPickerView, numberOfRowsInComponent 组件: Int) ->整数{返回 activeDataArray.count}func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent 组件: Int) ->细绳!{返回 activeDataArray[row] 为!细绳}func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent 组件: Int) {如果 activeDataArray == 季节 {enterSeason.text = season[row] as String}否则如果 activeDataArray == 运动 {enterSport.text = sport[row] as String}//试图隐藏dataPickerdataPickerView.hidden = 真//dataPickerView.reloadAllComponents()//self.dataPickerView.resignFirstResponder()//self.dataPickerView.frameForAlignmentRect(CGRectMake(0, 900, 375, 219))}//隐藏数据的函数func textFieldShouldReturn(textField: UITextField) ->布尔{textField.resignFirstResponder()返回真}//点击屏幕时隐藏键盘的功能覆盖 func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {self.view.endEditing(真)}}

解决方案

如果你想隐藏pickerView,试试这个:

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {如果 activeDataArray == 季节 {enterSeason.text = season[row] as String}否则如果 activeDataArray == 运动 {enterSport.text = sport[row] as String}//试图隐藏dataPickerself.view.endEditing(真)//dataPickerView.reloadAllComponents()//self.dataPickerView.resignFirstResponder()//self.dataPickerView.frameForAlignmentRect(CGRectMake(0, 900, 375, 219))}

I have found similar questions about this and their answers were helpful but I am stuck at one last thing. I am trying to get a pickerView to appear when I tap on a field, then when data is selected, I want the pickerView to hide. I am able to get the data from the pickerView to hide, however, there is still a grey rectangle that was behind the pickerView that remains. If I tap on the screen, not on a field or the pickerView, the gray rectangle hides, then reappears when I tap on the next field, only to remain after the new data is chosen, until I tap on some blank screen.

I am including my code below and you will see that I have tried several options. These are not all I have tried but after several attempts, I began to just comment out instead of delete so I could remember what I had done. I am very new to coding so I appreciate this site as a resource and thank you for your assistance.

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

}

解决方案

If you want to hide the pickerView, try this:

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

}

这篇关于Swift - 选择值后隐藏pickerView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆