【发布时间】:2010-05-10 18:15:52
【问题描述】:
我希望自定义标签栏的外观。具体来说,我想:
- 更改默认的 tabBar 颜色
- 在 tabBar 顶部添加自定义图像
- 将自定义图像添加到 tabBarButtons
- 改变tabBarButtons的字体
简而言之,我想要标签栏的所有功能,但具有完全自定义的外观。
我应该开始子类化元素,还是使用类别或什么?
【问题讨论】:
标签: iphone cocoa-touch
我希望自定义标签栏的外观。具体来说,我想:
简而言之,我想要标签栏的所有功能,但具有完全自定义的外观。
我应该开始子类化元素,还是使用类别或什么?
【问题讨论】:
标签: iphone cocoa-touch
当遇到这种情况时,我刚刚编写了一个自定义类(继承 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。
【讨论】: