导航风格,如Twitter for iPhone

时间:2012-08-25 19:48:32

标签: iphone objective-c ios cocoa-touch

我正在试图弄清楚Twitter for iPhone的导航风格是如何实现的。

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

但是,当您在详细信息视图中点按某个网址时,标签栏将移出屏幕并显示一个新工具栏。这与上述理论相矛盾。

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

事实上,Twitter for iPhone将第一个理论与Tweetbot导航风格背后的理论相结合。我如何实现官方Twitter应用程序的功能?

1 个答案:

答案 0 :(得分:2)

这可能是一个过于简化的描述,很多都是通过记忆,但我认为这应该让你在路上......

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

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

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

这不是一个严格的快速规则。在导航层次结构中替换“叶子”的标签栏是很常见的;想想Music.app和Photos.app。除非你有充分的令人信服的理由,否则就要避免它。