我怎样才能创建自己的UITabBar?

时间:2010-10-26 01:43:34

标签: iphone objective-c iphone-sdk-4.1

除了这个问题here之外,我真的很想创建自己的UITabBar,并且'滚动我自己'。我真的很好奇如何做到这一点,特别是在Twitter应用程序等应用程序中。

我该怎么做?任何人都可以指出任何关于如何子类化的好资源? 我应该以编程方式还是在XIB中进行?

编辑:我希望使用自定义图标/选定图标并仅使用图标来执行此操作。 编辑2:在阅读了进一步的答案后,听起来像一个自定义XXTabBarcontroller是我在这里真正想做的事情。有人可以对此发表评论吗?

谢谢,

4 个答案:

答案 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和欢呼!

http://www.rumexit.co.uk/2010/07/how-to-customise-the-tab-bar-uitabbar-in-an-iphone-application-part-1-of-2/