除了这个问题here之外,我真的很想创建自己的UITabBar,并且'滚动我自己'。我真的很好奇如何做到这一点,特别是在Twitter应用程序等应用程序中。
我该怎么做?任何人都可以指出任何关于如何子类化的好资源? 我应该以编程方式还是在XIB中进行?
编辑:我希望使用自定义图标/选定图标并仅使用图标来执行此操作。 编辑2:在阅读了进一步的答案后,听起来像一个自定义XXTabBarcontroller是我在这里真正想做的事情。有人可以对此发表评论吗?
谢谢,
答案 0 :(得分:6)
我不知道是否有最佳方法可以做到这一点,但我会分享我的经验:
我通过继承UIView而不是UITabBar创建了我自己的标签栏版本。正如链接问题所提到的,Apple的UI类对于它们的大小调整非常挑剔,我认为我不能按照我想要的那样获得UITabBar子类。
因为我没有UITabBar的子类,所以我最终还是推出了自己的UITabBarController和UITabBarDelegate版本,其接口与Apple类基本相同。我可以使用UITabBarItem来存储选项卡栏上按钮的标题和图标,这很有用,因为UIViewControllers有一个tabBarItem属性。这使得您只需在控制器中存储一组UIViewControllers,而不是控制器和标签栏项目的数组。
因为我主要使用自定义类,所以我以编程方式完成了所有操作,包括创建,配置和布置选项卡栏上的按钮。
就像我说的,这只是我的经历,希望它有所帮助。
答案 1 :(得分:6)
我最近在一个应用程序中这样做了。它的“代码”很少,几乎没有什么可以发布的。我是这样做的:
创建了一个UIImageView(大约50像素高),并将其放在屏幕的底部。我用一个类似于标签栏的图像填充它 - 即某种灰色渐变。我可能是UIImageView的子类 - 但你甚至不必这样做。
我画了一堆按钮/图标 - 每个37x37。
我在“标签栏”中放置了一堆UIButton - 并使用我创建的按钮/图标将它们设为“自定义”视图。
我只是使用touchUpInside方法让他们做的事情。
当我需要花哨时 - 我会通过和IBOutlet将按钮附加到我的代码中,这样我就可以“禁用”它们 - 我会为它们绘制一个灰色的“禁用状态”图像。
答案 2 :(得分:4)
如果你想要相同的功能,我建议使用UITabBarController,隐藏标签栏本身,然后创建自己的导航。我已经做了几次,它的效果非常好。
使用类似的内容隐藏标签栏并展开内容视图。
- (void)makeTabBarHidden:(BOOL)hide
{
if ( [tabBarController_.view.subviews count] < 2 )
return;
UIView *contentView;
if ( [[tabBarController_.view.subviews objectAtIndex:0] isKindOfClass:[UITabBar class]] )
contentView = [tabBarController_.view.subviews objectAtIndex:1];
else
contentView = [tabBarController_.view.subviews objectAtIndex:0];
if (hide)
{
contentView.frame = tabBarController_.view.bounds;
}
else
{
contentView.frame = CGRectMake(tabBarController_.view.bounds.origin.x,
tabBarController_.view.bounds.origin.y,
tabBarController_.view.bounds.size.width,
tabBarController_.view.bounds.size.height - tabBarController_.tabBar.frame.size.height);
}
tabBarController_.tabBar.hidden = hide;
}
然后使用UIButtons进行导航,以在视图控制器之间切换。
[tabBarController_ setSelectedIndex:0];
答案 3 :(得分:2)
我认为这就是你要找的......应该很容易将它子类化。 gl和欢呼!