iOS 5在多个场景中保持一致的标签栏

时间:2011-12-04 22:15:39

标签: iphone ios ios5 uitabbar

我正在iOS 5上开发我的第一个Apple产品。当我使用UITabBarController时,在多个场景中维护一致的UITabBar对象的最佳方法是什么?它只是一个标准的UIViewController。我的标签栏就像我想要的一样在一个场景上工作,我希望能够将它复制到我的其他4个场景中。

6 个答案:

答案 0 :(得分:1)

使用UIAppearance API在所有UITabBar个实例上设置视觉属性。

id appearance = [UITabBar appearance];
[appearance setBackgroundImage:someImage];
[appearance setTintColor:someTintColor];
//...

Here是可以在UITabBar的{​​{1}}代理上设置的属性列表:

答案 1 :(得分:1)

我认为这个创新的答案会用于你 Physical Button

答案 2 :(得分:0)

假设您确实不想使用UITabViewController,那么请让您的应用程序委托维护对全局UITabBar对象的引用,并在从视图切换到视图时,您可以请求实例并将其添加到视图层次结构中。

答案 3 :(得分:0)

这非常简单易行(我已在多个应用中完成)。

  1. 创建基于视图的应用程序。让我们将这样创建的单个VC称为“MainViewController”。
  2. 使用图像,按钮和MainViewController.xib中的内容创建顶栏。将顶级UIView的背景颜色设置为“Clear Color”。
  3. 不向此xib添加任何其他内容。
  4. 为您需要的所有视图创建视图控制器和Xib 显示(包括初始/第一个视图)。我们称之为MyViewController1& MyViewController2。
  5. 让MainViewController与MyViewController1“有”关系。含义MainViewController将具有MyViewController1类型的成员变量/属性。
  6. 同样适用于MyViewController2。
  7. 实例化MyViewController1& 2在MainViewController的“viewDidLoad”方法中。
  8. 将它们添加为MainViewController的子视图。
  9. 为初始视图(可能是MyViewController1)添加隐藏属性为NO,为另一个添加隐藏属性为YES。
  10. 此时,您将看到MainViewController的顶栏和MyViewController1的视图。
  11. 当您需要切换到MyViewController2时,只需将其隐藏属性设置为NO,将MyViewController1的隐藏属性设置为YES。
  12. 如果您想要从MyViewController1转换为动画  MyViewController2,将CABasicAnimation / CATransition添加到  CALayers到MyViewController1& MyViewController2(而不是  MainViewController)。然后你的顶栏(画上  MainViewController)将保持坚如磐石的稳定性  MyViewController1& 2将在它下面切换/动画。
  13. 但是,如果您希望顶栏离开并且新的顶栏与下一个视图一起显示,只需将CATransition / CAAnimation等附加到MainViewController的CALayer。
  14. 随时提出任何问题。

答案 4 :(得分:0)

您可以使用视图来包装您想要动态的内容。然后,您可以将第一个可见视图添加为此视图的子视图。接下来,您需要为视图(当前视图和要更改的视图)之间的过渡设置动画,以模拟更改视图控制器。这是我在两个视图之间使用的代码。我的“包装器”视图称为内容视图。您需要将其与您设置的标签栏进行整合...

[ contentView addSubview:view2 ];
[ view1 removeFromSuperview ];

CATransition *animation = [ CATransition animation ];

[ animation setType:kCATransitionPush ];
[ animation setSubtype:kCATransitionFromRight ];
[ animation setDuration:0.5 ];
[ animation 
 setTimingFunction:[ CAMediaTimingFunction
                    functionWithName:kCAMediaTimingFunctionEaseInEaseOut
  ]
 ];

[[ contentView layer ]
 addAnimation:animation
 forKey:@"currentTransition"
 ];

尝试一下!

答案 5 :(得分:0)

这不是标准方式,但如果您真的想在不使用tabBar的情况下在应用程序中提供tabBar功能。

在每个视图(尺寸为199 X 49)的底部创建一个4-5个自定义按钮(带图像),以便它完全消耗视图的底部(如tabBar)。只允许其中一个按钮操作一个视图休息全部被禁用。此外,您提供的按钮功能应更改图像以显示单击当前选项卡。