我的应用程序有一个带有四个选项卡的UITabBar ...每个选项卡都有自己的自定义UIViewController。其中三个有一个共同的地图和其他UI元素,在屏幕的同一个地方..在其中两个视图中,地图最初是隐藏的。
将这三个视图视为相同视图控制器的相同实例似乎更有意义..并且只是隐藏/显示元素。是否可以使用标签栏执行此操作?
答案 0 :(得分:3)
我不认为那些回答“是”的人会仔细阅读你的问题。您询问是否可以“使这三个视图与同一个视图控制器的 实例 相同”。你当然可以使用相同UIViewController子类的三个不同实例,但我认为你不想使用相同的实例。
我老实说从来没有试过这个,但我不会在逻辑上期望它有两个原因:
通过视图控制器的tabBarItem属性定义每个选项卡显示的标题和图标。如果相同的UIViewController实例在选项卡栏控制器的viewControllers数组中出现多次,那么每个选项卡也会共享相同的tabBarItem,这意味着您无法为每个选项卡指定唯一的标签和图标。
要从一个选项卡切换到另一个选项卡时节省内存,UIKit将卸载消失的视图控制器视图。如果您切换到的视图控制器与消失的视图控制器相同,则UIKit可能会在显示时尝试卸载其视图。我希望这会产生内存管理错误,可能会导致您的应用程序因EXC_BAD_ACCESS信号而崩溃。
我建议不要在多个标签页面中使用相同的实例,而是推荐其中一个选项:
一个。使用相同UIViewController子类的多个实例,并设置属性以唯一地配置每个实例。
B中。创建一个基础UIViewController子类,实现所有三个选项卡共有的方面,然后创建基类的三个子类,实现每个选项卡独有的那些方面。
答案 1 :(得分:0)
是的,可以在任何视图中显示/隐藏元素。您可以访问选项卡栏控制器,以了解通过自定义视图控制器的tabBarController
属性选择了哪个选项卡。