除了这里的这个问题,我真的对创建自己的 UITabBar 和“滚动我自己的”很感兴趣。我真的很好奇这是如何完成的,尤其是在 Twitter 应用程序等应用程序中。
我怎样才能做到这一点?任何人都可以指出任何关于如何子类化的好的资源吗?我应该以编程方式还是在 XIB 中进行?
编辑:我希望使用自定义图标/选定图标并仅使用图标来执行此操作。Edit2:在阅读了进一步的答案后,听起来自定义 XXTabBarcontroller 是我真正想要在这里做的。任何人都可以对此发表评论吗?
谢谢,
除了这里的这个问题,我真的对创建自己的 UITabBar 和“滚动我自己的”很感兴趣。我真的很好奇这是如何完成的,尤其是在 Twitter 应用程序等应用程序中。
我怎样才能做到这一点?任何人都可以指出任何关于如何子类化的好的资源吗?我应该以编程方式还是在 XIB 中进行?
编辑:我希望使用自定义图标/选定图标并仅使用图标来执行此操作。Edit2:在阅读了进一步的答案后,听起来自定义 XXTabBarcontroller 是我真正想要在这里做的。任何人都可以对此发表评论吗?
谢谢,
我不知道是否有最好的方法来做到这一点,但我会分享我的经验:
我通过继承 UIView 而不是 UITabBar 创建了我自己的标签栏版本。正如链接的问题所提到的,Apple 的 UI 类对它们的大小非常挑剔,我认为我不能让 UITabBar 子类按照我的意愿调整大小。
因为我没有 UITabBar 的子类,所以我最终也推出了自己的 UITabBarController 和 UITabBarDelegate 版本,其接口与 Apple 类基本相同。我能够使用 UITabBarItem 来存储标签栏上按钮的标题和图标,这很有用,因为 UIViewControllers 有一个 tabBarItem 属性。这使您可以在控制器中仅存储一组 UIViewController,而不是同时存储控制器和选项卡栏项的数组。
因为我主要使用自定义类,所以我以编程方式完成了这一切,包括创建、配置和布置选项卡栏上的按钮。
就像我说的,这只是我的经验,希望对您有所帮助。
我最近在一个应用程序中这样做了。它的“代码”太少了,几乎没有任何东西可以发布。我是这样做的:
创建了一个 UIImageView(大约 50 px 高),并将其放置在屏幕底部。我用一个类似于标签栏的图像填充它 - 即某种灰色渐变。我可能继承了 UIImageView - 但你甚至不必这样做。
我画了一堆按钮/图标 - 每个 37x37。
我在“标签栏”中放置了一堆 UIButton - 并使用我创建的按钮/图标将它们设为“自定义”视图。
我只是使用 touchUpInside 方法让他们做事。
当我需要花哨的时候——我会通过 IBOutlet 将按钮附加到我的代码中,这样我就可以“禁用”它们——我会为它们绘制一个灰色的“禁用状态”图像。
如果您想要相同的功能,我建议您使用 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];
我认为这就是您要寻找的...应该很容易将其子类化。gl 和欢呼!