我在我的代碼中有多個UIPickerView,讓我們假設用戶無意中打開PickerView,但希望保持選中同一行,就像我爲用戶觸摸已經選擇的行,選擇器是否隱藏?當用戶觸摸已選擇的行時,如何隱藏UIPIckerView
我試過這個:UIPicker detect tap/touch on currently selected row,但我無法讓它工作。
---編輯---
我會盡量做得更具體。我是編程和Swift語言的初學者。
這是我ViewController.swift
import UIKit
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
@IBOutlet weak var colorLabel: UILabel!
@IBOutlet weak var sizeLabel: UILabel!
@IBOutlet weak var colorButton: UIButton!
@IBOutlet weak var sizeButton: UIButton!
@IBOutlet weak var resultButton: UIButton!
@IBOutlet weak var colorPickerView: UIPickerView! = UIPickerView()
@IBOutlet weak var sizePickerView: UIPickerView! = UIPickerView()
var colorPickerData = ["Blue", "Red"]
var sizePickerData = ["Small", "Big"]
var descri = String()
var resultadoImagem = UIImage()
override func viewDidLoad() {
super.viewDidLoad()
colorPickerView.isHidden = true
sizePickerView.isHidden = true
self.colorPickerView.delegate = self
self.colorPickerView.dataSource = self
self.sizePickerView.delegate = self
self.sizePickerView.dataSource = self
colorLabel.text = colorPickerData[0]
sizeLabel.text = sizePickerData[0]
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if pickerView.tag == 1 {
return colorPickerData.count
} else if pickerView.tag == 2 {
return sizePickerData.count
}
return 0
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if pickerView.tag == 1 {
return "\(colorPickerData[row])"
} else if pickerView.tag == 2 {
return "\(sizePickerData[row])"
}
return ""
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if pickerView.tag == 1 {
colorLabel.text = colorPickerData[row]
colorPickerView.isHidden = true
} else if pickerView.tag == 2 {
sizeLabel.text = sizePickerData[row]
sizePickerView.isHidden = true
}
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
colorPickerView.isHidden = true
sizePickerView.isHidden = true
}
@IBAction func colorButton(_ sender: Any) {
colorPickerView.isHidden = !colorPickerView.isHidden
}
@IBAction func sizeButton(_ sender: Any) {
sizePickerView.isHidden = !sizePickerView.isHidden
}
@IBAction func resultButton(_ sender: Any) {
if (colorLabel.text == "Blue")
&& (sizeLabel.text == "Big") { resultadoImagem = UIImage(named: "blue-big.png")!; descri = "BLUE"}
else if (colorLabel.text == "Blue")
&& (sizeLabel.text == "Small") { resultadoImagem = UIImage(named: "blue-small.png)!; descri = "BLUE"}
else if (colorLabel.text == "Red")
&& (sizeLabel.text == "Big") { resultadoImagem = UIImage(named: "red-big.png")!; descri = "RED"}
else if (colorLabel.text == "Red")
&& (sizeLabel.text == "Small") { resultadoImagem = UIImage(named: "red-small.png")!; descri = "RED"}
self.performSegue(withIdentifier: "resultSegue", sender: nil)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "resultSegue" {
let DestViewController : SecondViewController = segue.destination as! SecondViewController
DestViewController.descText = descri
DestViewController.resultPhoto = resultadoImagem
}
}
}
此代碼的偉大工程,當我打的「結果」按鈕,它會轉到SecondViewController並顯示照片和說明。
我的困難是,colorPickerView打開並選中數據「Blue」,就像sizerPickerView默認打開數據「Small」一樣。我希望pickerView在用戶觸摸已經選擇的數據時關閉/隱藏。
歡迎來到SO。 **我們在這裏幫助您解決問題或幫助您提供的代碼。如果您無法提供代碼,則任何人都無法提供幫助。**請採取[導覽](https://stackoverflow.com/help)並閱讀[幫助中心](https://stackoverflow.com) /幫助)如何發佈問題。 – Syfer
假設您在說'行'時正在討論UITableViewCell。因此,要在這裏解決您的問題,您可以在該行的contentView上添加點按手勢或使用'didDeselectRowAtIndexPath'委託方法。無論如何,你的問題仍然非常廣泛,所以我希望我說得對。 –
你可以將它隱藏在didSelectRowAtIndexPath方法中 –