Swift UIPickerView 使用 IBAction 触发 Segue

Swift UIPickerView Trigger Segue with IBAction

我是 Swift 的新手,可以使用一些关于如何在单击按钮时使用 IBAction 触发 segue 的建议。我可以使用选择器进行 segue,但是我希望按钮触发 segue。我尝试触发 IBAction 中的函数,但它不起作用。感谢任何建议。谢谢

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

    switch (row) {

    case 0: self.performSegueWithIdentifier("Segue0", sender: self)
    break;
    case 1: self.performSegueWithIdentifier("Segue1", sender: self)
    break;
    case 2: self.performSegueWithIdentifier("Segue2", sender: self)
    break;
    case 3: self.performSegueWithIdentifier("Segue3", sender: self)
    break;
    case 4: self.performSegueWithIdentifier("Segue4", sender: self)
    break;
    default: break;

    }

这是标准按钮:

@IBAction func selectButton(sender: AnyObject) {


}

我设法使用以下方法让它工作。将不胜感激任何评论或更优雅的解决方案。 :)

添加了一个全局变量来保存选择器行:

var rowSelected = 0
var pickerData: [String] = [String]()

override func viewDidLoad() {
    super.viewDidLoad()

    // Connect data:
    self.locationPicker.delegate = self
    self.locationPicker.dataSource = self

pickerData = ["Location 1", "Location 2", "Location 3", "Location 4", "Location 5"]

// The number of columns of data
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    return 1
}

// The number of rows of data
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return pickerData.count
}

// The data to return for the row and component (column) that's being passed in
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    return "\(pickerData[row])"

}
// Capture the picker view selection
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

    rowSelected = row


}
@IBAction func selectButton(sender: AnyObject) {

    switch (rowSelected) {

    case 0: self.performSegueWithIdentifier("Segue0", sender: self)
    break;
    case 1: self.performSegueWithIdentifier("Segue1", sender: self)
    break;
    case 2: self.performSegueWithIdentifier("Segue2", sender: self)
    break;
    case 3: self.performSegueWithIdentifier("Segue3", sender: self)
    break;
    case 4: self.performSegueWithIdentifier("Segue4", sender: self)
    break;
    default: break;




}

如果您要查找的只是如何确定从按钮函数中选择了哪一行,您可以使用 UIPickerView.selectedRowInComponent(_:):

@IBOutlet weak var picker: UIPickerView! // Reference to picker from storyboard. 
@IBAction func selectButton(sender: AnyObject) {
    // Get the selected row. You only have one component, so the parameter is 0.
    let row = picker.selectedRowInComponent(0)

    // Switch block here
}

如果实际上你的 segues 实际上被命名为 "Segue0"、"Segue1" 等,那么你可以将 switch 块替换为:

self.performSegueWithIdentifier("Segue\(row)", sender: self)

但是,如果您使用的是更具描述性的转场名称(正如我希望的那样),那么您也可以将转场标识符存储在一个数组中,并只使用 row 作为数组的索引:

let segues = ["thisIsASegue", "thisIsAnotherSegue", "etc"]

// In the function:
self.performSegueWithIdentifier(segues[row], sender: self)