0

我对 iOS 编程比较陌生,并且一直在为 iPad 制作基于食谱的应用程序。我查看了很多答案,但似乎无法解决我的问题,所以我无法解释我的应用程序是如何布局的。

导航控制器 -> ViewController -Modal segue -> PreviewViewController -modal segue -> Navigation Controller -> RecipeViewController

在我的 RecipeViewController 中,我有一个按钮,当按下该按钮时,我希望它返回“主”屏幕,为此目的是“ViewController”。

这是“RecipeViewController”中按钮操作的代码:

- (IBAction)homeB:(id)sender {
ViewController* viewController = [[ViewController alloc]init];
[self.navigationController pushViewController:viewController animated:YES];
}

但是,当我按下此按钮时,会显示 ViewController,但屏幕是灰色的,我无法与屏幕进行交互。我无法发布屏幕外观的图像,因为我还没有足够的声誉,但我会尽可能更新它。

我尝试了其他显示它的方法,例如在故事板中的按钮和“ViewController”之间连接一个segue,然后在按下按钮时激活segue。但这会弄乱我代码的其他部分,因为我必须重新分配和初始化主屏幕。对于为什么会出现无法交互的灰色屏幕,我们将不胜感激。

还有一些注意事项:

self.navigationController

不返回 nil ,因此可以看到,并且按下按钮时不会显示错误。

谢谢

4

3 回答 3

2

如果你真的在做segues,那么我认为这是在故事板中制作的。如果是这种情况,那么您应该使用展开转场返回 ViewController。为此,您可以在 ViewController 中添加一个 IBAction,如下所示:

-(IBAction)comingBackFromRecipe:(UIStoryboardSegue*)sender {
    NSLog(@"I'm back");
}

重要的一点是发送者类型是 UIStoryboardSegue。然后在 IB 中,在 RecipeViewController 中,您可以控制从按钮拖动到控制器底部的绿色“退出”图标。当你放手时,你应该会看到你在 ViewController 中编写的方法——将它连接到那个。这将使您回到您开始使用的同一 ViewController 实例。

于 2013-02-11T23:23:58.093 回答
0

感谢大家的回复,不过我发现了我的问题。我的结构是错误的,我意识到我不需要为配方视图控制器设置另一个导航控制器,因为我没有从那里推动任何地方。因此,如果其他人有类似的问题,我的结构现在如下:

Navigation Controller -> View Controller -Modal Segue -> PreviewViewController - ModalSegue -> RecipeViewController

我删除了 PreviewViewController 和 RecipeViewController 之间的导航控制器。这意味着它们都是模态视图控制器。因此,要从 RecipeViewController 回到主屏幕,即“ViewController”,我只需要使用以下代码关闭模态视图的层次结构:

UIViewController * parent = self.presentingViewController;
[parent.presentingViewController dismissViewControllerAnimated:YES completion:nil];

我回到了两个阶段,这样 PreviewViewController 和 RecipeViewController 都被解雇了。

现在很好用,谢谢大家的帮助。

于 2013-02-13T12:29:11.170 回答
0

没有看到截图很难说,但据我了解,如果你想回到主屏幕,你不应该推送一个新的视图控制器(除非你真的想把它添加到堆栈中?)

要返回“主”屏幕,您应该尝试以下操作:

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

或者如果您的主屏幕是根,只需使用这个:

[self.navigationController popToRootViewControllerAnimated:YES];
于 2013-02-11T22:25:38.570 回答