【发布时间】:2019-07-02 17:03:07
【问题描述】:
我有一个 UIPickerView,其中有一些行,每行都有一个标题。我想要的是当单击一个标题时,一个特定于该标题的新视图控制器被链接到就像单击一个按钮将我带到一个新的 VC 一样。如何在选择器视图中使用行标题来做到这一点?
我正在尝试将特定行拖到视图控制器中,但整个选择器都被选中了。
【问题讨论】:
标签: ios swift uipickerview
我有一个 UIPickerView,其中有一些行,每行都有一个标题。我想要的是当单击一个标题时,一个特定于该标题的新视图控制器被链接到就像单击一个按钮将我带到一个新的 VC 一样。如何在选择器视图中使用行标题来做到这一点?
我正在尝试将特定行拖到视图控制器中,但整个选择器都被选中了。
【问题讨论】:
标签: ios swift uipickerview
你可以设置pickerView委托,之后你可以推送viewController
示例代码:
class ViewController: UIViewController {
@IBOutlet private weak var pickerView: UIPickerView!
struct PickerData {
let viewControllerId: String
let storyboardId: String
let title: String
}
private var pickersData: [PickerData] = []
override func viewDidLoad() {
super.viewDidLoad()
loadData()
pickerView.delegate = self
pickerView.dataSource = self
}
private func loadData() {
pickersData.append(
ViewController.PickerData(viewControllerId: "ViewController1", storyboardId: "Main", title: "Foo")
)
pickersData.append(
ViewController.PickerData(viewControllerId: "ViewController1", storyboardId: "Main", title: "Bar")
)
}
private func createViewController(from index: Int) -> UIViewController {
let model = pickersData[index]
let viewController = UIStoryboard(name: model.storyboardId, bundle: nil).instantiateViewController(withIdentifier: model.viewControllerId)
return viewController
}
private func pushViewController(viewController: UIViewController) {
// If Navigation
navigationController?.pushViewController(viewController, animated: true)
// If present
//present(viewController, animated: true, completion: nil)
}
}
extension ViewController: UIPickerViewDataSource {
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return pickersData.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return pickersData[row].title
}
}
extension ViewController: UIPickerViewDelegate {
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
pushViewController(viewController: createViewController(from: row))
}
}
【讨论】:
@IBOutlet weak var myPickerView: UIPickerView!
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
performSegue(withIdentifier: "segue\(row)", sender: nil)
}
从您的视图中拖动 segues,而不是从 pickerView 中拖动
【讨论】: