要使用segues将数据从当前视图控制器传递到下一个新视图控制器(而不是先前的视图控制器),请首先在相关情节提要中创建带有标识符的segue。重写当前视图控制器的prepareForSegue方法。在方法内部,通过其标识符检查刚创建的序列。通过在向下转换的视图控制器上设置属性,强制转换目标视图控制器并向其传递数据。
设置标识的标识符:
可以通过编程或使用情节提要中设置的按钮动作事件(通过Ctrl +拖动到目标视图控制器)来执行Segues。您可以在需要时使用视图控制器中的segue标识符以编程方式调用segue:
目标C
- (void)showDetail { [self performSegueWithIdentifier:@"showDetailingSegue" sender:self]; }
迅速
func showDetail() { self.performSegue(withIdentifier: "showDetailingSegue", sender: self) }
您可以在prepareForSegue方法的替代版本中配置segue有效负载。您可以在加载目标视图控制器之前设置必需的属性。
目标C
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if([segue.identifier isEqualToString:@"showDetailingSegue"]){ DetailViewController *controller = (DetailViewController *)segue.destinationViewController; controller.isDetailingEnabled= YES; } }
迅速
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { ifsegue.identifier== "showDetailingSegue" { let controller =segue.destinationViewControlleras! DetailViewController controller.isDetailingEnabled= true } }
DetailViewController是第二个视图控制器的名称,并且isDetailingEnabled是该视图控制器中的公共变量。
要扩展此模式,可以将public方法DetailViewController视为伪初始化器,以帮助初始化任何必需的变量。这将自行记录需要设置的变量,DetailViewController而无需通读其源代码。这也是放置默认值的方便地方。
目标C
- (void)initVC:(BOOL *)isDetailingEnabled { self.isDetailingEnabled= isDetailingEnabled }
迅速
func initVC(isDetailingEnabled: Bool) { self.isDetailingEnabled= isDetailingEnabled }