2016-04-09 2 views
2

У меня есть BaseViewController, подключенный к 3 различным пользовательским ViewControllers, использующим segues с идентификаторами. В BaseViewController есть табличное представление и на основе данных в tableviewCell, BaseViewController решает, какой segue следует одному из 3 пользовательских DestinationViewControllers.Swift prepareForSegue для одного из многих пользовательских ViewControllers

Мне также необходимо передать некоторые данные в DestinationViewController.

Я пытаюсь использовать либо prepareForSegue, либо performSegueWithIdentifier.

  1. prepareForSegue позволяет мне использовать UIStoryboardSegue для установки контроллера вида назначения и передачи его данных. Однако он не позволяет мне указать идентификатор segue, который я бы назвал. Случай 0 & В случае 1 используются два разных монитора.

    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 
    } 
    

Можете ли вы, ребята, предложить какие-либо решения? Заранее спасибо!

+0

В 'prepareForSegue (_ :) 'вы можете получить идентификатор, используя:' segue.identifier'. Вы могли бы использовать оба метода. Вызовите 'performSegueWithIdentfier (_ :)', а затем передайте данные в 'prepareForSegue (_ :)'. Кроме того, в быстрых переключателях вам не нужно явно вызывать 'break'. – Eendje

+0

... и вам не нужны точки с запятой. – vadian

+0

Вы, вероятно, будете использовать ** оба ** performSegueWithIdentifier и prepareForSegue. В вашем действии вызовите executeSegueWithIdentifier, а затем в prepareForSegue, используйте инструкции if для выполнения разных действий для разных segues и целевого контроллера. – ryantxr

ответ

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 при необходимости

 Смежные вопросы

  • Нет связанных вопросов^_^