Performwithsegue 并以编程方式切换视图 - Objective-C

Performwithsegue and programatically switching views - Objective-C

我有问题,我想在计时器到期时更改为另一个 viewcontroller,这适用于此代码:

- (IBAction)Akkoord:(id)sender {
    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"Innameformulier"];
    [self presentViewController:vc animated:YES completion:nil];
    [self performseguewithidentifier:@"nextcontroller"]
}

但是当我使用它时,prepareforsegue 方法中的变量没有传递。我怎样才能做到这一点?我已经尝试过 [self performseguewithidentifier] 但这不起作用。

我的准备代码是:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    Innameformulier *IForm = [segue destinationViewController];
    IForm.SignatureTransport = _drawImage.image;
    IForm.KlantnaamInname = _Klantnaamtransport;
}

如何调用此函数以在计时器上发生?

好的,您在这里所做的是完全绕过 segue。你需要做这样的事情...

- (IBAction)Akkoord:(id)sender {
    [self performseguewithidentifier:@"nextcontroller"]
}

这就是您需要做的全部。然后 segue 将为您创建 nextController,然后 prepareForSegue 中的代码将传递变量。

如果你想在计时器上使用它,那么你只需要设置一个计时器,当它到期时你可以 运行...

[self performseguewithidentifier:@"nextcontroller"]

只要你有一个带有这个标识符的segue,它就可以在任何地方使用。在计时器之后。

Interface Builder 中,select 要从中触发 segue 的视图控制器,CTRL-从它拖动到目标视图控制器,然后创建一个 segue。

Select segue,打开 Attributes Inspector 并为它创建一个 Identifier。

返回触发 segue 的 View Controller Class,如果您还没有评论它,请添加方法 prepareForSegue:

在您的 prepareForSegue: 方法中,您应该有如下内容:

- (void)prepareForSegue:(UIStoryboardSegue *)segue {

    if ([segue.identifier isEqualToString:@"XXXX"]) {

        DestinationVC *dVC = segue.destinationViewController;
        dVC.attribute1 = self.anAttribute;
        dVC.attribute2 = self.anotherAttribute;
   }
}

现在您可以通过调用 [self performSegueWithIdentifier:@"XXXX"].

来启动 segue

注意:您还可以从 UIControl 子类(例如 UIButton

中触发动作转场