У меня есть BaseViewController, подключенный к 3 различным пользовательским ViewControllers, использующим segues с идентификаторами. В BaseViewController есть табличное представление и на основе данных в tableviewCell, BaseViewController решает, какой segue следует одному из 3 пользовательских DestinationViewControllers.Swift prepareForSegue для одного из многих пользовательских ViewControllers
Мне также необходимо передать некоторые данные в DestinationViewController.
Я пытаюсь использовать либо prepareForSegue, либо performSegueWithIdentifier.
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 } }
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 }
Можете ли вы, ребята, предложить какие-либо решения? Заранее спасибо!
В 'prepareForSegue (_ :) 'вы можете получить идентификатор, используя:' segue.identifier'. Вы могли бы использовать оба метода. Вызовите 'performSegueWithIdentfier (_ :)', а затем передайте данные в 'prepareForSegue (_ :)'. Кроме того, в быстрых переключателях вам не нужно явно вызывать 'break'. – Eendje
... и вам не нужны точки с запятой. – vadian
Вы, вероятно, будете использовать ** оба ** performSegueWithIdentifier и prepareForSegue. В вашем действии вызовите executeSegueWithIdentifier, а затем в prepareForSegue, используйте инструкции if для выполнения разных действий для разных segues и целевого контроллера. – ryantxr