不会从子视图控制器弹出到父视图
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;
希望这对你有帮助..:)
【讨论】:
以上是关于不会从子视图控制器弹出到父视图的主要内容,如果未能解决你的问题,请参考以下文章