【问题标题】:Swift UIPickerView Trigger Segue with IBActionSwift UIPickerView 使用 IBAction 触发 Segue
【发布时间】:2015-10-11 21:10:52
【问题描述】:

我是 Swift 新手,可以就如何在按钮单击时使用 IBAction 触发 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) {


}

【问题讨论】:

    标签: ios iphone swift uipickerview ibaction


    【解决方案1】:

    如果您要查找的只是如何确定从按钮功能中选择了哪一行,您可以使用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
    }
    

    如果实际上您的转场实际上命名为“Segue0”、“Segue1”等,那么您可以将 switch 块替换为:

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

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

    let segues = ["thisIsASegue", "thisIsAnotherSegue", "etc"]
    
    // In the function:
    self.performSegueWithIdentifier(segues[row], sender: self)
    

    【讨论】:

    • 感谢您的信息。是的,我在我的生产应用程序中使用了更具描述性的 segue 名称。我会研究 UIPickerView.selectedRowInComponent。
    【解决方案2】:

    我设法使用以下方法使其正常工作。将不胜感激任何 cmets 或更优雅的解决方案。 :)

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

    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;
    
    
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-14
      • 1970-01-01
      • 2016-06-17
      • 2018-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多