在某些 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 的一部分的主要内容,如果未能解决你的问题,请参考以下文章
Swift3:为条件单元格从主 VC 调用 func 数据到 TableVC
以模态方式将 VC 呈现在其他 VC 之上 - 两者都是可触摸的