在某些 VC 与其他 VC 中,如何将横幅 UIView 显示为 UINavigationController 的一部分

Posted

技术标签:

【中文标题】在某些 VC 与其他 VC 中,如何将横幅 UIView 显示为 UINavigationController 的一部分【英文标题】:How can I show a banner UIView as part of the UINavigationController, when in some VC's vs others 【发布时间】:2016-11-15 15:40:16 【问题描述】:

假设我们有一个继承 UINavigationController 的 CustomNavigationController。

让我们用下面的例子来解释这个问题。

CustomNavC -> 推送 VC A。从 VC A,您可以推送 2 个不同的 VC。 VC B 和 VC C。我们会说这两个 VC 都在推动其他各种 VC,进一步深入兔子洞。

现在,假设我们要显示一个 UIView,它充当直接出现在导航控制器下方的横幅视图。但是,我们只希望横幅显示在 VC A、VC C、VC E、VC J 等位置。

是否有任何可能的方法可以从 CustomNavC 本身做到这一点?或者是获得控制哪个 VC 显示横幅的唯一方法......是将其放在 VC 本身上?

1) 我们把它放在 CustomNavC 视图上。当用户从 VC 移动到都显示横幅 (A->C) 的 VC 时,我们希望保留相同的横幅。我们通过在 CustomNavC 上布置横幅来实现这一点。但是,我们如何检查 VC 是否应该显示横幅?每次 NavC 推送或弹出 VC 时,我们都必须检查。可能每个 VC 上的某些功能,例如 -(BOOL)allowBannerViewDisplay 和 VC 可以选择加入。

2) 如果我们将 BannerView 放在单个 VC 上,它会变得更容易一些,但如果我们从 VC A -> VC C 移动,用户将在转换期间看到 2 个单独的横幅,而不是相同的横幅。

所以,我们需要解决方法 1. CustomNavC 监听通知并显示横幅。然后它需要检查当前显示的 VC,并且仅在 VC 允许的情况下才显示横幅。但是,如果用户切换到另一个 VC,则需要重新检查横幅当前是否显示的逻辑,如果是,则检查该 VC 是否要显​​示。

这一切都让我觉得很奇怪。

建议?

【问题讨论】:

意见:导航控制器决定的模式对我来说似乎是合理的。它在概念上类似于每个具有shouldAutorotate 属性的UIViewController 【参考方案1】:

我从来没有实现过这样的东西,但我的想法是这样的:

将此自定义视图设置为新类,并将引用传递给您的 VC。在自定义 View 上设置一个方法作为类方法,该方法接受 UIViewController 并返回一个布尔值,以确定它是否应该显示(而不是在每个 VC 上)。这个类方法可以获取类,看看它是否存在于类名数组之类的东西中。

现在,我从未将 UIView 从一个 VC 移动到另一个,但我认为可以将 UIView 作为子视图从它所在的 VC 中删除,并将其作为子视图放置在新的 VC 上。

或者,也许您可​​以为此自定义视图创建一个数据源/委托对象,并根据需要在每个 VC 上创建一个新的自定义 UIView,所有这些都引用相同的数据源/委托以适当地设置状态。

【讨论】:

以上是关于在某些 VC 与其他 VC 中,如何将横幅 UIView 显示为 UINavigationController 的一部分的主要内容,如果未能解决你的问题,请参考以下文章

如何将预建库添加到 VC++ 解决方案?

Swift3:为条件单元格从主 VC 调用 func 数据到 TableVC

以模态方式将 VC 呈现在其他 VC 之上 - 两者都是可触摸的

如何将标签栏控制器插入情节提要?

Qt 如何编译成可执行程序,像VC的静态编译,可以在脱离QT的环境中运行

visualstudioinstaller有病毒吗