2

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

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

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

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

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

4

1 回答 1

2

这可能是一个过于简化的描述,而且很多内容都是凭记忆进行的,但我认为这应该能让你继续前进……</p>

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

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

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

这不是一个硬性规定。在导航层次结构中,将标签栏替换为“叶子”是很常见的;想想 Music.app 和 Photos.app。除非你有强有力的理由,否则请避免它。

于 2012-08-25T21:33:15.227 回答