更改“更多”视图控制器的背景颜色

3

是否可以在UITabBarController的“更多”导航控制器中使用图像或改变单元格的背景颜色?


1
正如Travis所指出的那样,这是https://dev59.com/RnRB5IYBdhLWcg3wQVWV的重复。 - user253984
不,这不是重复的! - Michi-2142
2个回答

7

这两个链接都不是这个问题的答案。看起来Malakim指的是UITabBarController的MoreViewController,而不是想要改变tabbar颜色,而是想要改变构成MoreViewController的tableView的单元格。

答案很简单。您可以引用tabBarController的moreViewController属性,这将为您提供对UIMoreNavigationController实例的引用。

UINavigationController* moreNavController = myTabController.moreViewController;

使用这个导航控制器,你希望获取根视图控制器的视图,因为这是持有你的tableView的视图。实际上,根视图控制器是一个UITableViewController,访问它的视图可以直接获取tableView!
UITableView *moreView = ((UIViewController *)[moreNavController.viewControllers objectAtIndex:0]).view; //这里可能需要进行强制类型转换以抑制警告
于是,moreView就拥有了你感兴趣的tableView的引用。你可以通过使用moreView.subviews进行更深入的挖掘,或者只是改变一下背景颜色,比如:moreView.backgroundColor = [UIColor uglyColor]。

另外,你可以获取tableView,并创建一个拦截器来覆盖(cellForRowAtIndexPath:)方法(在首先传递给moreViewController之后)。 - user537213
更改为UINavigationController* moreNavController = myTabController.moreNavigationController; - Borzh

1

Steve提供的方法很好用,但是当我尝试将moreNavController的视图设置为表格视图时,它会给我一个警告。

警告:不兼容的Objective-C类型初始化“struct UIView *”,预期为“struct UITableView *”

因此,为了消除警告,我尝试了下面的代码,它可以工作,但不确定这是否是正确的方式。

    UINavigationController* moreNavController = self.tabBarController.moreNavigationController;
    UIViewController* moreViewController = [moreNavController.viewControllers objectAtIndex:0]; 
    moreViewController.view.backgroundColor = [UIColor redColor];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接