Swift - 选择值后隐藏pickerView [英] Swift - hide pickerView after value selected
问题描述
我发现了与此相关的类似问题,他们的回答很有帮助,但我坚持最后一件事.当我点击一个字段时,我正在尝试获得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屋!