Swift prepareForSegue 到许多自定义 ViewController 之一

Swift prepareForSegue to one of many custom ViewControllers

我有一个 BaseViewController 使用带有标识符的 segues 连接到 3 个不同的自定义 ViewController。 BaseViewController 有一个 tableview,并且基于 tableviewCell 中的数据,BaseViewController 决定将哪个 segue 带到 3 个自定义 DestinationViewControllers 之一。

我还需要将一些数据传递给 DestinationViewController。

我正在尝试使用 prepareForSegue 或 performSegueWithIdentifier。

  1. prepareForSegue 允许我使用 UIStoryboardSegue 设置目标视图控制器并向其传递数据。但是,它不允许我指定我想调用的 segue 标识符。案例 0 和案例 1 使用两个不同的 ViewControllers。

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    
        switch testVar{
    
        case 0:  
            let svc = segue.destinationViewController as! CustomTableViewController1
            svc.name = myName
            break;
    
        case 1:  
            let svc = segue.destinationViewController as! CustomTableViewController2
            svc.name = myName1
    
            break;
    
        default:
            break
        }
    }
    
  2. performSegueWithIdentifier 允许我指定 segue 标识符,但它不允许我指定我想调用的 3 个自定义 DestinationViewControllers 中的哪一个,也没有给我一个很好的传递方式我需要传递的数据。

    func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {
    
      switch testVar {
    
          case 0:  
            performSegueWithIdentifier("destination1", sender:self )
            break;
    
          case 1:  //Submitted
            performSegueWithIdentifier("destination1", sender: self)
            break;
    
          default:
            break
          }
    
      return indexPath
    }
    

你们能提出一些解决方案吗?提前致谢!

您必须同时使用 performSegue 和 prepareforsegue

func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {

   switch testVar { 
       case 0:       
                     performSegueWithIdentifier("destination1", sender:self ) 
           break; 
       case 1: //Submitted          
                  performSegueWithIdentifier("destination1", sender: self) 
           break; 
       default: 
           break 
    } 
    return indexPath 
}

并且在您的 prepareForSegue 中实现如下:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "destination1" {
        if let svc = segue.destinationViewController as? CustomTableViewController1 {
            svc.name = myName
        }
    } else if segue.identifier == "destination2" {
        if let svc = segue.destinationViewController as? CustomTableViewController2 {
            svc.name = myName1
        }
    }
}

如果需要,也可以使用 didSelectRow 而不是 willSelectRow