我正在尝试实现类似于Tweetie应用程序的UI ,其行为如下:顶级视图控制器似乎是导航控制器,其根视图是"帐户"表视图.如果您点击任何帐户,它将转到第二级,其底部有一个标签栏.每个选项卡项显示不同的列表,并允许您进一步向下钻取(后续级别不显示选项卡栏).
所以,这似乎是实现层次结构:
UINavigationController
账户:UITableViewController
UITabBarController
推文:UITableViewController
详细视图的推文/用户/等
回复:UITableViewController
...
这似乎有效[^ 1],但根据SDK文档-pushViewController:animated:
(强调添加)似乎不支持:
viewController:推入堆栈的视图控制器.它不能是标签栏控制器的实例.
我想避免私有API等,但我不确定为什么这种用法被明确禁止,即使它似乎工作正常.谁知道原因?
我已经考虑过将标签栏控制器作为主控制器,每个标签都包含单独的导航控制器.这个问题是每个导航控制器需要共享一个根视图控制器(即Tweetie中的"帐户"表) - 这似乎不起作用:将表控制器推送到第二个导航控制器似乎将其删除从第一个.更不用说选择不同帐户时所有的簿记可能会很痛苦.
我该如何以正确的方式实现这一目标?
[^ 1]:标签栏控制器需要进行子类化,以便该级别的标签栏控制器导航项与所选标签的导航项保持同步,并且单个标签的表控制器需要将其各自的详细视图推送到self.tabBarController.navigationController
而不是self.navigationController
.
之前的两个答案是正确的 - 我不在UITabBarController
Tweetie中使用.编写一个很容易被推到导航控制器堆栈上的自定义XXTabBarController
(简单子类UIViewController
)很容易,但仍然遵循"视图控制器"的理念.特定于帐户的视图(Tweets
/ Replies
/ Messages
)上的每个"选项卡" 都是它自己的视图控制器,就它们而言,它们在屏幕上被简单的交换UITabBarController
.
我正在构建一个使用类似Tweetie导航框架的应用程序.我在我的博客www.wiredbob.com上写了一篇关于如何做到这一点的帖子,该博客也链接到源代码.这是一个完整的模板,您可以将其作为另一个项目的基础.祝好运!
可以将UITabBar添加到任何UIViewController.这样你实际上不必推送UITabBarController,因此保持在Apple API的指导范围内.
在界面构建器中,UITabBar位于Cocoa Touch库中的"Windows,Views&Bars"下.
我在几个应用程序中执行此操作.将标签栏添加到基于navigationController的应用程序的技巧是不使用TabBarController.向视图添加选项卡栏,使该视图的视图控制器成为TabBarDelegate,并在视图控制器的代码中的选项卡栏上响应用户选择.
我使用Tab Bars将其他视图作为子视图添加到Tab Bar的视图,重新加载具有不同数据集的表视图,重新加载UIPickerView等.
我在过去的一小时里一直在努力实施一个,UITabBar
因为当我试图展示我的观点时,它会被隐藏起来; 然后我发现这篇文章:
基本上,请确保按照以下代码行在tabbar下面插入新视图:
[self.view insertSubview:tab2ViewController.view belowSubview:myTabBar];