gpt4 book ai didi

ios - 使用 segueWithIdentifier :source:destination:performHandler: 自定义 UIStoryboardSegue

转载 作者:IT王子 更新时间:2023-10-29 08:11:41 27 4
gpt4 key购买 nike

我正在尝试使用自定义 UIStoryboardSegue 来实现两个 View Controller 之间的转换。我可以通过子类化 UIStoryboardSegue 来做到这一点,然后在 IB 中设置此类。但是,我正在查看文档,上面写着:

If your segue does not need to store additional information or provide anything other than a perform method, consider using the segueWithIdentifier:source:destination:performHandler: method instead.

暗示您不需要创建自定义子类,只需使用自定义的 performHandler。

我对这段代码应该放在哪里以及如何使用它感到困惑。我是否在 IB 中正常创建 segue,然后在它被触发之前覆盖它(可能在 shouldPerformSegue: 或类似的地方)。在苹果文档的其他地方,它说:

Your app never creates segue objects directly; they are always created on your behalf by iOS when a segue is triggered

所以我不太明白为什么他们会说要使用类创建器方法实例化一个 segue。

最佳答案

segueWithIdentifier:source:destination:performHandler: 的要点

  • 在您还想创建自定义转换而不创建 segue 子类的情况下,提供 UIViewController performSegueWithIdentifier:sender 的替代方法。
  • 提供一个可用作 segueForUnwindingToViewController:fromViewController:identifier
  • 返回值的 segue

如上所述,此方法仅适用于您手动调用的转场——即不适用于否则会通过 IB 触发器触发的转场。

因此,例如,如果您有一个需要在特定超时期限后触发的 segue(例如自定义锁屏),您可以使用 segueWithIdentifier:source:destination:performHandler: 处理自定义转换。

-(void)appTimeoutLockScreen
{
UIStoryboardSegue *segue =
[UIStoryboardSegue segueWithIdentifier:@"LockScreenSegue"
source:sourceVC
destination:destinationVC
performHandler:^{
// transition code that would
// normally go in the perform method
}];
// Dev is responsible for calling prepareForSegue and perform.
// Note, the order of calls for an IB triggered segue as well as
// a performSegueWithIdentifier segue is perform first, then
// prepareForSegue:sender. Manual segues need to inverse the call
// in order to ensure VC setup is finished before transition.
[self prepareForSegue:segue sender:self];
[segue perform];
}

该方法的另一个实际用途是展开转场。使用类似的场景对于前面的示例,我们可以使用它返回一个 segue 以从锁定屏幕转换回之前的 viewController:

-(UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController*)toVC 
fromViewController:(UIViewController *)fmVC
identifier:(NSString *)identifier
{
UIStoryboardSegue *segue =
[UIStoryboardSegue segueWithIdentifier:@"FromLockScreenSegue"
source:fmVC
destination:toVC
performHandler:^{
// transition code
}];

return segue;
}

关于ios - 使用 segueWithIdentifier :source:destination:performHandler: 自定义 UIStoryboardSegue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20143174/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com