我在我的应用程序上使用标签栏(UITabBarController),我希望自定义单击更多按钮时出现的表格的外观.我已经设定了如何通过设置更改更多屏幕上的导航栏的外观
self.moreNavigationController.navigationBar.barStyle
在UITabBarController的子类中,我已经设法通过修改来更改表的背景颜色
self.moreNavigationController.topViewController.view.backgroundColor
,但我无法弄清楚如何更改表格中出现的单元格中的字体颜色.我希望我能用
self.moreNavigationController.topViewController.view.visibleCells
但这似乎总是空洞的.我试过在viewDidLoad,viewWillAppear和viewDidAppear中做这个没有成功.对象self.moreNavigationController.topViewController的类型为UIMoreListController,它似乎没有文档,我在界面中看不到任何可以帮助我的东西.
有任何想法吗?
继Stephan的建议替换moreNavigationController的dataSource之后,这里是我实现的代码的快速视图.
我创建了一个名为MoreTableViewDataSource的新类,它实现了UITableViewDataSource协议.更多页面实际用于构建表的控制器称为UIMoreListControllerModern,它实现了UITableViewDataSource协议的必需部分.我的实现看起来像这样.
-(MoreTableViewDataSource *) initWithDataSource:(id) 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{ id originalDataSource; } @property (retain) id originalDataSource; -(MoreTableViewDataSource *) initWithDataSource:(id ) dataSource; @end
和
#import "MoreTableViewDataSource.h" @interface CustomTabBarController : UITabBarController { MoreTableViewDataSource *moreTableViewDataSource; }
只有在显示moreNavigationController后才会填充visibleCells.
并且单元格是在运行时创建的,因此即使您更改单元格的内容,它们也会在显示时被替换.
要尝试的一件事是替换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]; } }