不会从子视图控制器弹出到父视图

Posted

技术标签:

【中文标题】不会从子视图控制器弹出到父视图【英文标题】:Doesn't pop to Parent view from the Child view controller 【发布时间】:2013-04-26 11:45:26 【问题描述】:

我有 3 个视图控制器“根”、“父”和“子”。现在我正在从 Parent 的方法中推入 Child。现在,当我想通过以下代码从子视图弹出到父级时:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle: nil];
Parent *svc = [storyboard instantiateViewControllerWithIdentifier:@"Parent"];

[self.navigationController popToViewController:svc animated:YES];

这显示了错误:

'NSInternalInconsistencyException', reason: 'Tried to pop to a view controller that doesn't exist.'

当我改为编写以下代码时,它会弹出一个空白屏幕! :

[self.navigationController popViewControllerAnimated:YES];

当我编写以下代码时,它会弹出到 Root。 :

[self.navigationController popToRootViewControllerAnimated:YES];

但我想准确地弹出到父视图。我该怎么做?

提前致谢。

从父类推送示例:

-(void)Custom

if([info isEqualToString:@"message"])

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle: nil];

Child *cd = [storyboard instantiateViewControllerWithIdentifier:@"Child"];

[self.navigationController pushViewController:cd animated:YES];
   

来自 Child 的流行示例:

-(void)viewDidLoad

 [super viewDidLoad];

 [self sendMessage]

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle: nil];
Parent *svc = [storyboard instantiateViewControllerWithIdentifier:@"Parent"];

[self.navigationController popToViewController:svc animated:YES];


【问题讨论】:

【参考方案1】:

你不能弹出到子视图控制器,因为没有添加到导航控制器堆栈中。 (当您调用[storyboard instantiateViewControllerWithIdentifier:@"Child"]; 时,您会创建一个新的 Child 实例)

如果您推送 Parent,然后您将孩子从 Parent 推送,并且如果您从 Child [self.navigationController popViewControllerAnimated:YES] 调用它应该可以工作。

【讨论】:

对不起,我在问题中写了一些错误的例子。我已经编辑过了。请立即检查。 我的回答仍然有效,但是您可以在推送和弹出视图控制器的位置添加代码吗? 我在问题部分添加了push & popping的代码。请立即检查。 您不应该在-(void)viewDidLoad 中弹出视图控制器。在子视图控制器中点击按钮时尝试弹出视图控制器并使用[self.navigationController popViewControllerAnimated:YES];【参考方案2】:

要弹出你的视图控制器,你可以使用下面的代码...

NSArray *viewContrlls=[[self navigationController] viewControllers];
        for( int i=0;i<[ viewContrlls count];i++)
            id obj=[viewContrlls objectAtIndex:i];
            if([obj isKindOfClass:[<yourViewController> class]] )

                [[self navigationController] popToViewController:obj animated:YES];
                return;
            
        

希望这对你有帮助..:)

【讨论】:

以上是关于不会从子视图控制器弹出到父视图的主要内容,如果未能解决你的问题,请参考以下文章

在 Cocoa,UIResponder 中将消息从子视图发送到父视图?

弹出到初始视图控制器

从模态弹出到根视图控制器

从模态视图控制器推送/弹出到另一个视图控制器(包括图片)

如何关闭视图控制器并快速弹出到根视图控制器?

将视图控制器弹出到不存在的视图控制器