导航风格,就像在iPhone的Twitter中一样



我试图弄清楚iPhone版Twitter中的导航风格是如何实现的。

当你点击时间线中的推文时,(自定义(标签栏在从时间线到详细信息视图的过渡期间会保持原位。这表明标签栏是"主"UIViewController的子视图,它包含一个有4个UINavigationControllers的数组,每个标签一个。按下选项卡时,主UIViewController会从其视图中删除当前可见的UINavigationController,并将新添加为子视图。在这种方法中,选项卡栏不是任何导航堆栈的一部分,因此它在每次转换期间都保持原位。

但是,当您点击详细信息视图中的 URL 时,选项卡栏将移出屏幕并显示一个新工具栏。这与上述理论相矛盾。

Tweetbot使用与官方Twitter应用程序完全相反的导航风格。如果你在 Tweetbot 的时间线中点击一条推文,标签栏确实会移出屏幕。在过渡期间,选项卡栏永远不会保留在原位。他们可能使用一个UINavigationController,主UIViewController+标签栏作为rootviewcontroller。我假设当用户点击推文时,时间线通过委派或类似的东西在主UIViewController上调用[self.navigationController pushViewController:]

事实上,iPhone版Twitter将第一种理论与Tweetbot导航风格背后的理论混合在一起。我怎样才能实现官方推特应用的功能?

这可能是一个过于简化的描述,很多事情都是凭记忆进行的,但我认为这应该让你走上正轨......

根视图控制器主要是从头开始实现的选项卡栏控制器。它最初用于自定义选项卡栏样式,然后才有简单的 iOS API。但是,通过继续拥有代码,添加工具栏/选项卡栏交换并不难。

根视图控制器同时拥有选项卡栏视图和工具栏视图。根视图控制器是每个选项卡的导航控制器的委托;当导航控制器推送新的视图控制器时,主视图控制器会检查它是否具有工具栏项,并管理交换。

出于可用性原因,将选项卡栏替换为工具栏通常是一个坏主意。标签栏为屏幕上的内容提供接地;想想浏览器的标签页。选项卡栏项还允许您通过在选项卡处于活动状态时点击它来跳转到层次结构中的根视图控制器。(它不是最容易发现的功能,但至少它是标准系统范围的功能。

这不是一个硬性规定。替换导航层次结构中"叶子"的选项卡栏是很常见的;Music.app 思考,Photos.app。除非你有强有力的令人信服的理由,否则请避免它。

最新更新