5

除了这里的这个问题,我真的对创建自己的 UITabBar 和“滚动我自己的”很感兴趣。我真的很好奇这是如何完成的,尤其是在 Twitter 应用程序等应用程序中。

我怎样才能做到这一点?任何人都可以指出任何关于如何子类化的好的资源吗?我应该以编程方式还是在 XIB 中进行?

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

谢谢,

4

4 回答 4

6

我不知道是否有最好的方法来做到这一点,但我会分享我的经验:

我通过继承 UIView 而不是 UITabBar 创建了我自己的标签栏版本。正如链接的问题所提到的,Apple 的 UI 类对它们的大小非常挑剔,我认为我不能让 UITabBar 子类按照我的意愿调整大小。

因为我没有 UITabBar 的子类,所以我最终也推出了自己的 UITabBarController 和 UITabBarDelegate 版本,其接口与 Apple 类基本相同。我能够使用 UITabBarItem 来存储标签栏上按钮的标题和图标,这很有用,因为 UIViewControllers 有一个 tabBarItem 属性。这使您可以在控制器中仅存储一组 UIViewController,而不是同时存储控制器和选项卡栏项的数组。

因为我主要使用自定义类,所以我以编程方式完成了这一切,包括创建、配置和布置选项卡栏上的按钮。

就像我说的,这只是我的经验,希望对您有所帮助。

于 2010-10-26T04:08:50.810 回答
6

我最近在一个应用程序中这样做了。它的“代码”太少了,几乎没有任何东西可以发布。我是这样做的:

创建了一个 UIImageView(大约 50 px 高),并将其放置在屏幕底部。我用一个类似于标签栏的图像填充它 - 即某种灰色渐变。我可能继承了 UIImageView - 但你甚至不必这样做。

我画了一堆按钮/图标 - 每个 37x37。

我在“标签栏”中放置了一堆 UIButton - 并使用我创建的按钮/图标将它们设为“自定义”视图。

我只是使用 touchUpInside 方法让他们做事。

当我需要花哨的时候——我会通过 IBOutlet 将按钮附加到我的代码中,这样我就可以“禁用”它们——我会为它们绘制一个灰色的“禁用状态”图像。

于 2010-11-02T23:10:54.673 回答
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];

于 2010-11-04T21:40:27.950 回答
2

我认为这就是您要寻找的...应该很容易将其子类化。gl 和欢呼!

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

于 2010-11-05T14:20:40.180 回答