如何自定义标签栏的外观?

时间:2010-05-06 04:31:22

标签: iphone cocoa-touch

我希望自定义标签栏的外观。具体来说,我想:

  • 更改默认tabBar颜色
  • 在tabBar
  • 上添加自定义图像
  • 将自定义图像添加到tabBarButtons
  • 更改tabBarButtons
  • 的字体

简而言之,我想要一个标签栏的所有功能,但具有完全自定义的外观。

我应该开始子类化元素,还是使用类别或什么?

1 个答案:

答案 0 :(得分:1)

当面对这种情况时,我刚刚编写了一个自定义类(子类化UIViewController)并使用按钮作为用户与之交互的UI对象。使用这种技术,您可以非常积极地进行内存管理,以UITabViewController无法管理的方式删除和重新创建未使用的选项卡。我没有报道的唯一区域是MORE ...换成表格视图 - 但我真的不想要那个!

...编辑 这样没有可重用的代码。对于每个选项卡,只需使用按您希望的方式设置的自定义按钮。每个按钮正常(取消选择),按下(打开)和当前(关闭),我有三种状态。我的touchupinside处理程序根据需要通过调用greytherightbuttons并传递按钮的标记来交换正常和按下的按钮。


- (void) greytherightbuttons:(int)n {


    switch (n) {
        case 0:
            [b0 setImage:[UIImage imageNamed:@"btn_gallery_your_designs_off.png"] forState:UIControlStateNormal];
            [b1 setImage:[UIImage imageNamed:@"btn_gallery_recent_editions_deselect.png"] forState:UIControlStateNormal];
            [b2 setImage:[UIImage imageNamed:@"btn_gallery_highest_rated_deselect.png"] forState:UIControlStateNormal];
            break;
        case 1:
            [b0 setImage:[UIImage imageNamed:@"btn_gallery_your_designs_deselect.png"] forState:UIControlStateNormal];
            [b1 setImage:[UIImage imageNamed:@"btn_gallery_recent_editions_off.png"] forState:UIControlStateNormal];
            [b2 setImage:[UIImage imageNamed:@"btn_gallery_highest_rated_deselect.png"] forState:UIControlStateNormal];         
            break;

        case 2:
            [b0 setImage:[UIImage imageNamed:@"btn_gallery_your_designs_deselect.png"] forState:UIControlStateNormal];
            [b1 setImage:[UIImage imageNamed:@"btn_gallery_recent_editions_deselect.png"] forState:UIControlStateNormal];
            [b2 setImage:[UIImage imageNamed:@"btn_gallery_highest_rated_off.png"] forState:UIControlStateNormal];

            break;
        default:
            break;
    }

}

下一步是交换正确的视图。

在视图中交换的实际方式取决于您希望如何创建视图,但它并不比您的新视图控制器的alloc / initWithFrame复杂。 [self.view addSubview:newvc.view]然后将其从视图中删除,并在更改标签时为零。