我希望自定义标签栏的外观。具体来说,我想:
简而言之,我想要一个标签栏的所有功能,但具有完全自定义的外观。
我应该开始子类化元素,还是使用类别或什么?
答案 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]然后将其从视图中删除,并在更改标签时为零。