【问题标题】:Is it possible to make a childViewController's view full screen above tabBarController's view?是否可以在 tabBarController 的视图上方全屏显示 childViewController 的视图?
【发布时间】:2015-09-01 15:39:10
【问题描述】:
[self addChildViewController:self.redVC];
[self.view addSubview:self.redVC.view];
[self.redVC didMoveToParentViewController:self];

“self”是一个tabBarController,“redVC”是一个测试VC。我希望完整的生命周期(例如 viewDidAppear 和旋转链)传递给 childViewController(redVC),所以我使用 childVC。但是,此方法将显示 tabBar。

当只是将 self.redVC.view 放在 self.view 之上,而不是通过 addChildViewController。 tabBar 可以被覆盖。 Overlay a view over whole screen, when using UITabBarController?.

同时,我可能会在 tabBarViewController 的视图中添加一个透明视图,在这种情况下,应该可以看到 tabBar。因此,我不想更改 tabBar 的框架或隐藏它。

有没有办法实现所有这些?

  • 父视图控制器的完整生命周期传递和旋转链
  • 要添加的全屏视图(如果此视图是透明的,应该可以看到工具栏)
  • 不要更改或隐藏 tabBar

【问题讨论】:

  • 你先写:“但是,这个方法会显示tabBar。”然后“不要更改或隐藏 tabBar”-> 那么你想让 tabbar 可见还是不可见?
  • @Vive 对不起我的英语不好,我添加了三个条件。我想让 tabBar 可见。
  • 那你为什么不直接 pushViewController..?
  • 我已经编辑了我的答案,以展示如何推送该视图并保持 tabBar 可见。

标签: ios objective-c uitabbarcontroller childviewcontroller


【解决方案1】:

如果你想让标签栏不可见,请回答:

您应该隐藏viewWill(Did)AppearviewDid(Will)Disappear 上的标签栏,而不是这样的黑客。将您的 viewController 添加到普通堆栈中。

你也可以只添加modalViewController。

PushViewController *pushViewController = [[PushViewController alloc] init];
[self presentViewController:pushViewController animated:YES completion:^{}];

这样,您的PushViewController 将拥有所有视图生命周期方法(如viewDidAppear: 等),并且当此控制器可见时,您的标签栏将不可见。


如果你想让标签栏可见,请回答:

在您的故事板(或代码)中添加 UINavigationBar。

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

顺便说一句:尽量避免这种黑客行为。它们将来可能无法工作,阅读起来不友好,并且通常倾向于表明代码不好。

您还应该重新阅读 Apple 文档中关于 MVCview lifecycleUIViewController 的部分。

【讨论】:

  • 我编辑了我的问题并解释了为什么我不隐藏或更改 tabBar 的框架。
  • @JeffMa 你的方法是错误的。 viewDidAppear: 等是 UIViewController 方法,您正在尝试将 UIView 添加到 self.view -> 它是一个不同的对象,没什么奇怪的 UIView 不处理 UIViewController 方法。反正。最简单的方法是在您的视图中显示一个新的UIViewController
  • presentViewController 将用子代替换父代。所以当子视图透明时,父视图是不可见的。
  • @JeffMa 它不会替换,它会将新的推送到堆栈并移动到新的。如果它是透明的,它将不可见。但是,您之前的问题也没有提及透明度。
  • 也许我应该添加一些关于我为什么想要这个 redVC 的背景信息。 redVC 是整个应用程序的一些通用流行层。当它收到一些通知时,它会弹出。我的实现是将它作为 childViewController 添加到 rootViewController。在某些情况下,它将是透明的,我重写了 pointInside 方法以将点传递给 parentVC。所以推送到导航堆栈可能不是一个好的选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-27
  • 2013-01-27
  • 1970-01-01
相关资源
最近更新 更多