【问题标题】:How to customize the appearance of a tab bar?如何自定义标签栏的外观?
【发布时间】:2010-05-10 18:15:52
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: iphone cocoa-touch


    【解决方案1】:

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

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

    
    - (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] 然后将其从视图中删除,并在您更改选项卡时将其设为 nil。

    【讨论】:

    • 感谢 Andiih 的回答。您可能有示例代码,或者有关解决方案的更多详细信息?
    猜你喜欢
    • 2020-11-23
    • 1970-01-01
    • 2012-05-24
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 2015-10-16
    • 1970-01-01
    相关资源
    最近更新 更多