我有一个带有“更多”视图控制器的选项卡栏(UITabBarController)应用程序,因为它具有5个以上的视图。我的应用程序的其余部分具有黑色背景和白色文本,并且我已经能够自定义此表以匹配此表。因此,结果是,通常显示在“更多”表左侧的选项卡栏图像不可见(因为它们是白色背景)。我需要找到一种方法来使标签栏图像像在本身具有黑色背景的标签栏中那样显示。

例:

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


提前致谢,
朱利安

最佳答案

进行moreController.topViewController.view有点危险。

我建议改用您自己创建的带有常规图标的更多选项卡,然后使用常规的导航控制器方法在“更多列表”下打开其他选项卡。当然,您需要从选项卡栏中删除所有溢出选项卡项目。

但是,可能会有更优雅的方法来执行此操作。

08-06 12:58