Настройка меню More на Панели вкладок

20
задан Cœur 18 February 2019 в 09:24
поделиться

2 ответа

visibleCells заполняется только после того, как moreNavigationController отображен.

И ячейки создаются во времени выполнения, поэтому даже если Вы изменяете содержание ячеек, они заменяются, когда они отображены.

Одна вещь попробовать состояла бы в том, чтобы заменить источник данных moreNavigationController tableView, назвать cellForRowAtIndexPath первоначального источника данных и изменить его содержание прежде, чем возвратить его.

использование кода ниже, отобразившись однажды moreNavigationController для инициализации его Вы будете видеть, что, когда Вы возвращаетесь к moreNavigationController, ячейки являются красными, но сразу возвращаются к белому фону.

UITableView *view = (UITableView *)self.tabBarController.moreNavigationController.topViewController.view;
if ([[view subviews] count]) {
  for (UITableViewCell *cell in [view visibleCells]) {
    cell.backgroundColor = [UIColor redColor];
  }
}
21
ответ дан 29 November 2019 в 23:06
поделиться

Следование за предложением Stephan для замены источника данных moreNavigationController вот быстрое по представлению кода, который я реализовал.

я создал новый класс под названием MoreTableViewDataSource, который реализует протокол UITableViewDataSource. Контроллер, который больше страницы на самом деле использует для создания таблицы, называют UIMoreListControllerModern, и это реализует просто необходимые части протокола UITableViewDataSource. Моя реализация похожа на это.

-(MoreTableViewDataSource *) initWithDataSource:(id<UITableViewDataSource>) dataSource
{
    self = [super init];
    if (self)
    {
            self.originalDataSource = dataSource;
    }

    return self;
}

- (void)dealloc
{
    self.originalDataSource = nil;
    [super dealloc];
}

- (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 whiteColor];
    return cell;
}

и затем в моем классе CustomTabBarController я переопределяю viewDidLoad следующим образом:

- (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.backgroundColor = [UIColor blackColor];
        moreTableViewDataSource = [[MoreTableViewDataSource alloc] initWithDataSource:view.dataSource];
        view.dataSource = moreTableViewDataSource;

    }
}

Согласно просьбе вот заголовочные файлы

@interface MoreTableViewDataSource : NSObject <UITableViewDataSource>
{
    id<UITableViewDataSource> originalDataSource;
}

@property (retain) id<UITableViewDataSource> originalDataSource;

-(MoreTableViewDataSource *) initWithDataSource:(id<UITableViewDataSource>) dataSource;

@end

и

#import "MoreTableViewDataSource.h"

@interface CustomTabBarController : UITabBarController 
{
    MoreTableViewDataSource *moreTableViewDataSource;
}
26
ответ дан 29 November 2019 в 23:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: