标签栏项目图像在具有黑色背景的MoreNavigationController中不可见

时间:2009-06-18 14:54:20

标签: iphone uitabbarcontroller

我有一个带有“更多”视图控制器的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;
}

提前致谢,
儒略

2 个答案:

答案 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;
}

干杯, 迈克尔