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];
}
}
Следование за предложением 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;
}