在基于tabbarcontroller的项目中使用滚动显示屏幕顶部的tabbar

时间:2012-03-17 20:12:51

标签: iphone objective-c ipad scroll uitabbarcontroller

我必须实现基于标签栏的应用程序。有两个要求

  1. 标签栏项目将超过10个,它们应滚动显示在下一页中。我有一个参考并正在研究它。但是我没有得到第二个起点。
  2. 它应该在屏幕顶部显示(tabbar)而不是底部,大致类似于在应用中实现,如链接http://appworld.blackberry.com/webstore/content/screenshots/21999/?lang=en中所示。
  3. 因此,如果任何人有任何想法或代码,请告诉我并帮助我。

1 个答案:

答案 0 :(得分:1)

显然你不能使用UIKit的UITabBarController。

您需要定义自己的自定义解决方案。

可能的解决方案:

  1. 在屏幕顶部放置一个UIScrollBar
  2. 在滚动条内部实例化一些自定义类型的UIButton和为每个按钮定义的图像
  3. 将每个UIButton关联到不同的UIView(或不同的UIViewController): 例如Button1 - >视图1; Button2 - >视图2
  4. 每次单击按钮时,只需用选定的视图替换标签栏下方的视图。
  5. 在第[3]点中,为什么最好使用视图控制器而不是视图?因为使用视图控制器允许您为每个标签栏功能分离逻辑功能,而不是在同一视图控制器中填写所有内容。 基本上你有一个“主”视图控制器,它实例化滚动视图(带按钮)并包含另一个称为“容器”的子视图(最初为空),它将占用屏幕的剩余部分。 现在,当您单击每个按钮时,您将分配init-init其相应的视图控制器(让我们称之为“child1”),您将加载其视图(“child1.view”),然后您将其添加为“容器的子视图” “:

    [containter addSubview:child1.view]
    (不要忘记先删除容器中现有的子视图)。 重要提示:唯一会响应界面旋转等事件的视图控制器将只是“主”而不是“子”。因此,接口方向管理必须仍由“main”完成,并且所有方向更改事件都必须由您的代码发送到子容器。 这种方法的好处是单个子系统的功能可以在其视图控制器中完全实现,“main”将作为容器和选项卡管理器工作,没有核心逻辑功能。

    将此逻辑移至更高级别的视图控制器以获得高可重用性是有意义的,但它会更加复杂。