点击 UILabel (Swift) 时如何显示 UIPickerView?
How do I show a UIPickerView when tapping a UILabel (Swift)?
我的应用程序在启动时显示某物的价格,并且我隐藏了货币列表。当用户点击价格时,我想让它显示下面隐藏的货币列表,然后在选择一种后再次隐藏它们。不知道怎么办,没有找到任何 Swift 轻击手势识别器的代码?我是你可以做类似 priceLabel.isTappedUp = blah blah 的事情,几年前,也许它是 Objec C。有什么想法吗?
代码如下:
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
let baseURL = "https://apiv2.bitcoinaverage.com/indices/global/ticker/BTC" // API
let currencyArray = ["AUD", "BRL","CAD","CNY","EUR","GBP","HKD","IDR","ILS","INR","JPY","MXN","NOK","NZD","PLN","RON","RUB","SEK","SGD","USD","ZAR"] // List of currencies
let currencySymbolArray = ["$", "R$", "$", "¥", "€", "£", "$", "Rp", "₪", "₹", "¥", "$", "kr", "$", "zł", "lei", "₽", "kr", "$", "$", "R"] // Currency symbols
var currencySelected = ""
var finalURL = ""
// Pre-setup IBOutlets
@IBOutlet weak var priceLabel: UILabel!
@IBOutlet weak var currencyPicker: UIPickerView!
override func viewDidLoad() {
super.viewDidLoad()
currencyPicker.delegate = self
currencyPicker.dataSource = self
currencyPicker.selectRow(5, inComponent:0, animated:false) // Select default currency choice to £
// Print out the default row price
finalURL = baseURL + currencyArray[5]
print(finalURL)
currencySelected = currencySymbolArray[5]
getBitcoinData(url: finalURL)
currencyPicker.isHidden = true
priceLabel.isUserInteractionEnabled = true
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
// Number of columns
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
// Number of rows
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return currencyArray.count // Number of rows = the amount in currency array
}
// Row Title
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return currencyArray[row]
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
finalURL = baseURL + currencyArray[row]
print(finalURL)
currencySelected = currencySymbolArray[row]
getBitcoinData(url: finalURL)
}
你可以试试手势
let tapRound = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:)))
priceLabel.isUserInteractionEnabled = true
priceLabel.addGestureRecognizer(tapRound)
//
@objc func handleTap(_ sender: UITapGestureRecognizer? = nil)
{
self.currencyPicker.isHidden = false
}
您可以使用 UIPickerView
作为 UITextField
的 inputView,但使用 UITapGestureRecognizer
并保留 UILabel
,定义以下变量:
var currencyPicker = UIPickerView()
var textField : UITextField!
然后将手势添加到viewDidLoad
中的标签:
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(displayPickerView))
tapGesture.numberOfTapsRequired = 1
priceLabel.addGestureRecognizer(tapGesture)
最后添加手势处理程序来显示选择器,此函数将创建一个隐藏的 UITextField
个:
@objc private func displayPickerView(){
if textField == nil {
self.textField = UITextField(frame:.zero)
textField.inputView = self.currencyPicker
self.view.addSubview(textField)
}
textField.becomeFirstResponder()
}
如果对你有帮助,请告诉我。
我的应用程序在启动时显示某物的价格,并且我隐藏了货币列表。当用户点击价格时,我想让它显示下面隐藏的货币列表,然后在选择一种后再次隐藏它们。不知道怎么办,没有找到任何 Swift 轻击手势识别器的代码?我是你可以做类似 priceLabel.isTappedUp = blah blah 的事情,几年前,也许它是 Objec C。有什么想法吗?
代码如下:
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
let baseURL = "https://apiv2.bitcoinaverage.com/indices/global/ticker/BTC" // API
let currencyArray = ["AUD", "BRL","CAD","CNY","EUR","GBP","HKD","IDR","ILS","INR","JPY","MXN","NOK","NZD","PLN","RON","RUB","SEK","SGD","USD","ZAR"] // List of currencies
let currencySymbolArray = ["$", "R$", "$", "¥", "€", "£", "$", "Rp", "₪", "₹", "¥", "$", "kr", "$", "zł", "lei", "₽", "kr", "$", "$", "R"] // Currency symbols
var currencySelected = ""
var finalURL = ""
// Pre-setup IBOutlets
@IBOutlet weak var priceLabel: UILabel!
@IBOutlet weak var currencyPicker: UIPickerView!
override func viewDidLoad() {
super.viewDidLoad()
currencyPicker.delegate = self
currencyPicker.dataSource = self
currencyPicker.selectRow(5, inComponent:0, animated:false) // Select default currency choice to £
// Print out the default row price
finalURL = baseURL + currencyArray[5]
print(finalURL)
currencySelected = currencySymbolArray[5]
getBitcoinData(url: finalURL)
currencyPicker.isHidden = true
priceLabel.isUserInteractionEnabled = true
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
// Number of columns
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
// Number of rows
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return currencyArray.count // Number of rows = the amount in currency array
}
// Row Title
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return currencyArray[row]
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
finalURL = baseURL + currencyArray[row]
print(finalURL)
currencySelected = currencySymbolArray[row]
getBitcoinData(url: finalURL)
}
你可以试试手势
let tapRound = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:)))
priceLabel.isUserInteractionEnabled = true
priceLabel.addGestureRecognizer(tapRound)
//
@objc func handleTap(_ sender: UITapGestureRecognizer? = nil)
{
self.currencyPicker.isHidden = false
}
您可以使用 UIPickerView
作为 UITextField
的 inputView,但使用 UITapGestureRecognizer
并保留 UILabel
,定义以下变量:
var currencyPicker = UIPickerView()
var textField : UITextField!
然后将手势添加到viewDidLoad
中的标签:
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(displayPickerView))
tapGesture.numberOfTapsRequired = 1
priceLabel.addGestureRecognizer(tapGesture)
最后添加手势处理程序来显示选择器,此函数将创建一个隐藏的 UITextField
个:
@objc private func displayPickerView(){
if textField == nil {
self.textField = UITextField(frame:.zero)
textField.inputView = self.currencyPicker
self.view.addSubview(textField)
}
textField.becomeFirstResponder()
}
如果对你有帮助,请告诉我。