首页 文章

Swift prepareForSegue是许多自定义ViewControllers之一

提问于
浏览
2

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

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

我试图使用prepareForSegue或performSegueWithIdentifier .

  • 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
    }
}
  • performSegueWithIdentifier允许我指定segue标识符,但它不允许我指定我想调用的3个自定义DestinationViewController中的哪一个,也不能给我一个传递我需要传递的数据的好方法 .
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
}

你们能提出任何解决方案吗?提前致谢!

1 回答

  • 0

    你必须同时使用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

相关问题