【问题标题】:Push a View Controller in a UINavigationController在 UINavigationController 中推送视图控制器
【发布时间】:2014-12-07 00:26:28
【问题描述】:

我有一个带有导航控制器的选项卡视图控制器。在第一个选项卡项中,我单击视图中的一个按钮,该按钮会弹出一个带有动画的视图:YES。

然后,当该视图完成后,我点击另一个按钮将其关闭。喜欢:

                   [self dismissViewControllerAnimated:NO completion:^{

                        ProfilesViewController *profile = [[ProfilesViewController alloc] init];
                        [self.navigationController pushViewController:profile animated:YES];

                        //SHOW YOUR NEW VIEW CONTROLLER HERE!
                    }];

但每次运行此代码时,它都会关闭视图,不推送配置文件控制器,并从第一个标签栏项目显示视图。

如何使用返回箭头将 ProfilesViewController 推送到屏幕?

【问题讨论】:

  • 尝试通过将视图控制器设置为导航控制器的根来呈现视图控制器。然后从该视图控制器本身推送ProfilesViewController
  • 哪一个设置为root
  • 将呈现的视图控制器作为导航控制器的根。并推送ProfilesViewController,然后在完成任务后调用dismissViewControllerAnimated

标签: ios ios7 uiviewcontroller uinavigationcontroller uitabbarcontroller


【解决方案1】:

如果您使用dismissViewControllerAnimated 关闭这意味着VC 是模态呈现的。因此,它没有导航控制器(所以self.navigationController 为零),因此它无法将任何内容推送到导航控制器中。

您确实应该向控制器添加一个属性,它是一个委托或完成块,可用于将控制器从另一个控制器(呈现它的控制器)推送到关闭并推送控制器。

第二个选项是传递导航控制器,它的代码量与使用块类似,但不太好。

一个糟糕的选择是使用parentViewController 来找到合适的导航控制器,但这很糟糕,原因有很多。

【讨论】:

  • 所以标签视图控制器有4个视图控制器。每个按钮上都有一个按钮,可以弹出上面的代码并将其关闭。我在哪里创建属性?
  • 该属性被添加到弹出的VC中,因为它需要一个delegate来告诉它何时完成,以便delegate可以推送你的其他VC
  • 不是 100% 如何正确实施它
  • 以上这部分是否“您应该真正向控制器添加一个属性,该属性是一个委托或完成块,可用于将控制器从另一个控制器(呈现它的那个)推送到关闭并推动控制器”添加到启动控制器
  • 不,代表什么并不重要,只要它实现了协议
猜你喜欢
  • 1970-01-01
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
相关资源
最近更新 更多