在 UIPickerView 上选择行时如何使用信息填充第二个视图控制器
Posted
技术标签:
【中文标题】在 UIPickerView 上选择行时如何使用信息填充第二个视图控制器【英文标题】:How to populate a second view controller with information when a row is selected on a UIPickerView 【发布时间】:2019-06-20 15:45:55 【问题描述】:我正在创建我的第一个应用程序,我希望在 UI 选择器中选择项目时在第二个视图控制器中显示数据。
当点击我的第一个视图控制器上的搜索栏时,我希望出现一个 UI 选择器。 UI 选择器将显示国家名称。 UI 选择器将使用所选国家名称填充搜索栏。当按下按钮时,我想对第二个视图控制器执行 segue,然后将填充有关所选国家/地区的信息。我正在尝试开发我的第一个应用程序,但我似乎找不到关于这个确切主题的任何教程。如何在选择搜索栏时显示 UI 选择器?如何根据选定的选取器行将信息传递给第二个视图控制器?
以下是我自己编写的代码。否则,我难住了。
import UIKit
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate
@IBOutlet weak var countryPicker: UIPickerView!
@IBOutlet weak var goButtonPressed: UIButton!
var countryName : [String] = [String]()
override func viewDidLoad()
super.viewDidLoad()
self.countryPicker.delegate = self
self.countryPicker.dataSource = self
countryName = ["Australia", "Bolivia", "Croatia", "Denmark", "Estonia", "France", "Germany", "Hungary"]
func numberOfComponents(in pickerView: UIPickerView) -> Int
return 1
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
return countryName.count
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
print (countryName[row])
return countryName[row]
【问题讨论】:
【参考方案1】:我会这样做:
首先,在您的第一个 View Controller 中声明一个变量,并为其分配 pickerView 的第一个值:
var selectedCountryName: String = countryName[0]
然后,声明以下方法来捕获选择器视图选择并将其分配给之前声明的变量:
// Capture the picker view selection
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent
component: Int)
selectedCountryName = countryName[row]
然后,在您的第二个视图控制器中,声明相同的 selectedCountryName 变量:
var selectedCountryName: String = country[0]
最后,在第一个视图控制器的 prepareForSegue 方法中,将选定的国家名称从第一个视图控制器传递给第二个视图控制器:
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
let destinationVC = segue.destination as! SecondViewController
destinationVC.selectedCountryName = selectedCountryName
【讨论】:
以上是关于在 UIPickerView 上选择行时如何使用信息填充第二个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
而在 indexPath 的 didselectrow 上选择取消选择行时会崩溃