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



假设我们有一个CustomNavigationController,它是UINavigationController的子类。

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

CustomNavC ->推VC A,从VC A你可以推2个不同的VC。VC B和VC c,我们会说这两个VC都推着其他的VC,在兔子洞里走得更远。

现在,假设我们想要显示一个UIView作为横幅视图直接出现在导航控制器下面。但是,我们只希望横幅显示在VC A, VC C, VC E, VC J等。

是否有任何可能的方法从CustomNavC本身做到这一点?或者,这是获得风投打出的旗号的唯一途径……是把责任推给风投自己?

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

2)如果我们把BannerView放在单独的VC上,它会变得更容易一些,但交易破坏者是,如果我们从VC a移动到VC C,用户将在过渡期间看到2个单独的横幅,而不是相同的横幅。

我们需要用方法一来解。CustomNavC监听通知并显示横幅。然后,它需要检查当前显示的VC,并仅在VC允许的情况下显示横幅。然而,如果用户切换到另一个VC,它需要重新检查当前横幅是否显示的逻辑,如果是,检查该VC是否希望它显示。

我觉得这一切都很奇怪。

建议吗?

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

将这个自定义视图设置为一个新类,并沿着vc传递引用。在自定义视图上设置一个方法,作为一个类方法,它接受一个UIViewController并返回一个bool,用于是否应该显示(而不是在每个vc上)。这个类方法可以获取类并查看它是否存在于类名数组中。

现在,我从来没有移动过一个UIView从一个VC到另一个,但我认为这是可能的移除UIView作为一个子视图从VC上,并把它放在新的一个作为一个子视图。

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

最新更新