Swift - 选择值后隐藏 pickerView
Swift - hide pickerView after value selected
我发现了与此相关的类似问题,他们的回答很有帮助,但我对最后一件事感到困惑。我试图让 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)
}
}
如果你想隐藏 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()
}
}
我发现了与此相关的类似问题,他们的回答很有帮助,但我对最后一件事感到困惑。我试图让 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)
}
}
如果你想隐藏 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()
}
}