要使用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
}