iOS 使用Segues(向前传递数据)

示例

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