gpt4 book ai didi

objective-c - popToRootViewControllerAnimated 不显示 Root View Controller

转载 作者:太空狗 更新时间:2023-10-30 03:51:23 25 4
gpt4 key购买 nike

我需要一些关于导航 Controller 问题的帮助。

我有一个 navigationController,其中推送了 4 个 ViewControllers。我推送的最后一个 vc 以模态方式呈现了进一步的 ViewController。模态 ViewController 呈现一个 ActionSheet。根据用户的回答,我要么只关闭模态 ViewController,要么我想返回到根 ViewController

在模态呈现的 ViewController 中,我有:

- (void) dismissGameReport
{
[[self delegate] GameReportModalWillBeDismissed:modalToPopToRoot];
}

在最后一个 ViewController 插入 navigationController 堆栈时,我有:

- (void)GameReportModalWillBeDismissed: (BOOL)popToRoot;
{
if (popToRoot)
{
[self.navigationController popToRootViewControllerAnimated:NO];
}
else
{
[self dismissModalViewControllerAnimated:YES];
}
}

关闭模态视图 Controller 工作正常。然而,

[self.navigationController popToRootViewControllerAnimated:NO];

不会导致根 ViewController 显示其 View 。添加一些日志信息后,我看到在向 self.navigationController 发送消息后,堆栈已正确弹出,但执行继续按顺序进行。屏幕仍然显示模态 ViewController 的 View 。

作为一种解决方法,我尝试始终关闭模态视图 Controller ,并且在 ViewWillAppear 方法中有 popToRootAnimated 消息。没有不同。仍然弹出 Controller 堆栈,但屏幕继续显示我的模态视图 Controller 的 View 并继续按顺序执行。

有人可以帮我吗?

最佳答案

我喜欢这些欺骗性的问题。这看起来很简单,直到您尝试去做。

我发现基本上您确实需要关闭模态视图 Controller ,但是如果您尝试在下一行从导航 Controller 中弹出,事情就会变得困惑。在尝试 pop 之前,您必须确保 dismiss 已完成。在 iOS 5 中你可以使用 dismissViewControllerAnimated:completion:像这样。

-(void)GameReportModalWillBeDismissed:(BOOL)popToRoot{    
if (popToRoot){
[self dismissViewControllerAnimated:YES completion:^{
[self.navigationController popToRootViewControllerAnimated:YES];
}];
}
else{
[self dismissModalViewControllerAnimated:YES];
}
}

但我看到您的问题标签中有 4.0。我为 <iOS 5 找到的解决方案远没有那么漂亮,但应该仍然有效,听起来你已经在路上了。你要viewDidAppear:不是viewWillAppear: .我这里的解决方案涉及一个 ivar,比方说:

BOOL shouldPopToRootOnAppear;

然后是你的 GameReportModalWillBeDismissed:看起来像这样:

-(void)GameReportModalWillBeDismissed:(BOOL)popToRoot{    
shouldPopToRootOnAppear = popToRoot;
[self dismissModalViewControllerAnimated:YES];
}

还有你的viewDidAppear:看起来像这样……

-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
if (shouldPopToRootOnAppear){
[self.navigationController popToRootViewControllerAnimated:YES];
return;
}
// Normal viewDidAppear: stuff here
}

关于objective-c - popToRootViewControllerAnimated 不显示 Root View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8916412/

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