gpt4 book ai didi

ios - 如何/何时在弹出另一个 View Controller 后立即推送 View Controller ?

转载 作者:行者123 更新时间:2023-11-29 03:23:44 25 4
gpt4 key购买 nike

我有主视图 Controller (从 UINavigationController 派生),它序列到 View Controller A。当用户退出 A 时,展开序列返回到主 Controller ,然后主 Controller 序列到 View Controller B。

我面临的问题是,如果我在主视图 Controller 中有以下代码:

- (IBAction)unwindToMasterViewController:(UIStoryboardSegue *)segue
{
[self performSegueWithIdentifier:@"SequeToViewControllerB" sender:self];
}

然后我收到错误:“嵌套推送动画可能会导致导航栏损坏,对 View Controller B 的开始/结束外观转换的调用不平衡”。

但是,如果我从展开序列中删除对 PerformSeque 的调用,并从主视图 Controller 上的按钮手动触发它,那么一切都可以。因此,这表明问题与计时相关,事实上我过去也见过类似的问题,这些问题与动画计时相关(尝试在上一次调用 Push 完全完成之前调用 PushViewControllerAnimated:YES 等)。

考虑到这一点,我尝试将 seque 放在下面的代码中,期望 didPopItem 在 View Controller A 完成从堆栈中弹出之前不会被调用。

- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item
{
[self performSegueWithIdentifier:@"HomeSeque" sender:self];
}

但这并没有解决问题。

那么我如何知道 View Controller A 何时完成从堆栈中弹出,以便我知道它可以安全地序列化到 View Controller B? (假设这确实是问题所在,但似乎是我的按钮实验造成的)。

或者有什么方法可以让操作系统为我从 VC A 过渡到 VC B?

最佳答案

您可以使用此处讨论的方法:popping and pushing view controllers in same action

换句话说,不是使用将调用 popViewControllerAnimated:YES 的固定展开转场,而是通过调用 popViewControllerAnimated:NO 弹出,现在您可以直接继续到推送转场。

更简洁的方法是使用新的 View Controller 堆栈调用 setViewControllers:animated:

关于ios - 如何/何时在弹出另一个 View Controller 后立即推送 View Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20751253/

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