我有一个带有“更多”视图控制器的Tab Bar(UITabBarController)应用程序,因为它有超过5个视图。我的应用程序的其余部分有黑色背景和白色文本,我已经能够自定义此表以匹配此。但是,由于这种情况,通常出现在“更多”表左侧的标签栏图像是不可见的(因为它们用于白色背景)。我需要找到一种方法来使Tab Bar图像显示为Tab Bar,它本身有黑色背景。
示例:
Black Background (Invisible Images)
我已经将TabBarController子类化并更改了“MoreTableView”的数据源:
TabBarController.m
- (void)viewDidLoad {
[super viewDidLoad];
UINavigationController *moreController = self.moreNavigationController;
moreController.navigationBar.barStyle = UIBarStyleBlackOpaque;
if ([moreController.topViewController.view isKindOfClass:[UITableView class]])
{
UITableView *view = (UITableView *)moreController.topViewController.view;
view.separatorColor = [[UIColor alloc] initWithRed:0.3 green:0.3 blue:0.3 alpha:1.0];
view.backgroundColor = [UIColor blackColor];
view.dataSource = [[MoreTableViewDataSource alloc] initWithDataSource:view.dataSource];
}
}
MoreTableViewDataSource.m
-(MoreTableViewDataSource *) initWithDataSource:(id<UITableViewDataSource>) dataSource
{
originalDataSource = dataSource;
[super init];
return self;
}
- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
{
return [originalDataSource tableView:table numberOfRowsInSection:section];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [originalDataSource tableView:tableView cellForRowAtIndexPath:indexPath];
cell.textColor = [[UIColor alloc] initWithRed:1 green:0.55 blue:0 alpha:1.0];
cell.accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"customAccessory.png"]];
return cell;
}
提前致谢,
儒略
答案 0 :(得分:1)
做moreController.topViewController.view
有点危险。
我建议改为放入你自己创建的选项卡,使用普通图标执行更多列表,然后通过常规导航控制器方法打开更多列表下的其他选项卡。当然,您需要从标签栏中删除任何溢出标签项。
然而,可能有一种更优雅的方式来做到这一点。
答案 1 :(得分:1)
首先,感谢您发布tabbar控制器的子类。 我将它包含在我正在编写的应用程序中并遇到了同样的问题。
我的解决方案是简单地交换图像和突出显示的图像。
为此,您必须更改tableView:cellForRowAtIndexPath:
的方法MoreTableViewDataSource.m
,例如:
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [dataSource tableView:tableView cellForRowAtIndexPath:indexPath];
UIImageView *imageView = [cell imageView];
UIImage *image = [imageView image];
[imageView setImage:[imageView highlightedImage]];
[imageView setHighlightedImage:image];
return cell;
}
干杯, 迈克尔