【问题标题】:Pushed ViewController is "greyed out" cannot intact with it推送的 ViewController 是“灰色的”,它不能完好无损
【发布时间】:2013-02-13 20:29:11
【问题描述】:

我对 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”之间连接一个转场,然后在按下按钮时激活转场。但这会弄乱我代码的其他部分,因为我必须重新分配和初始化主屏幕。对于为什么会出现无法交互的灰色屏幕的任何帮助,我们将不胜感激。

还有一些注意事项:

self.navigationController

不返回 nil 所以可以看到,按下按钮时也不会显示错误。

谢谢

【问题讨论】:

  • 你能贴出 ViewController 类的代码吗?是通过编程方式创建的,还是使用 Interface Builder 创建的?
  • 您是在故事板中制作的吗?这是你的结构吗: ViewController 是导航控制器的根视图控制器。它对 PreviewViewController 进行模态搜索,然后再对另一个导航控制器进行模态搜索,该导航控制器的根视图控制器是 RecipeViewController。那正确吗?您是否计划添加更多控制器,因为如果您不这样做,这不是一个很好的结构?

标签: iphone ios objective-c ipad


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    [self.navigationController popToRootViewControllerAnimated:YES];
    

    【讨论】:

      【解决方案3】:

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

      导航控制器 -> 视图控制器 -Modal Segue -> PreviewViewController - ModalSegue -> RecipeViewController

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-09
        • 1970-01-01
        • 1970-01-01
        • 2019-01-22
        • 1970-01-01
        • 2019-02-21
        • 2015-03-09
        相关资源
        最近更新 更多