Панель элементов изображения изображений невидима в MoreNavigationController с черным фоном - PullRequest
2 голосов
/ 18 июня 2009

У меня есть приложение панели вкладок (UITabBarController) с «Больше» View Controller из-за наличия более 5 представлений. У остальной части моего приложения черный фон и белый текст, и я смог настроить эту таблицу в соответствии с этим. Однако в результате этого изображения панели вкладок, которые обычно отображаются в левой части таблицы «Еще», невидимы (поскольку они предназначены для белого фона). Мне нужно найти способ отображения изображений на панели вкладок так же, как на панели вкладок, которая сама имеет черный фон.

Пример:

Черный фон (Невидимые изображения)

Я переклассифицировал 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 ]

1 голос
/ 30 декабря 2009

во-первых, спасибо за размещение вашего подкласса контроллера вкладок. Я включил его в приложение, которое я пишу, и столкнулся с той же проблемой.

Мое решение - просто поменять местами изображение и выделенное изображение. Для этого вам нужно изменить метод 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;
}

Ура, Michael

1 голос
/ 19 июня 2009

Делать moreController.topViewController.view довольно опасно.

Я бы порекомендовал вместо этого поместить вкладку собственного создания, которая делает список «больше» со стандартным значком, а затем открыть другие вкладки под списком «больше» обычными методами контроллера навигации. Вам, конечно, нужно будет удалить любые элементы вкладки переполнения из панели вкладок.

Однако может быть более элегантный способ сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...