我很惊讶没有“更多”被问到这个:-)
我的应用程序是具有多个部分的标准选项卡栏控制器。每个部分(选项卡)包含一个导航控制器,该控制器控制几个视图控制器(您的基本表视图 + 详细视图类型的设置)。现在我已经添加了第 6 个选项卡,iOS 创建了默认的“更多”选项卡来控制最后两个选项卡。我需要消除导航栏中间的“更多”文本(注意:不是按钮文本,也不是选项卡本身的标题),并将自定义背景图像应用于导航栏。
注意:这个问题是关于自定义“更多”导航栏的——我已经成功修改了所有非 iOS 创建的导航栏上的背景图片和 titleView 文本。
在我的应用程序委托中,应用程序是这样组合在一起的:
创建视图控制器:
ViewController1 *vc1 = [ViewController1 alloc] initWithNibName@"View1" bundle:nil];
vc1.title = @"VC1";
vc1.tabBarImage.image = [UIImage imageNamed:@"image1.png"];
对视图控制器 vc2 到 vc6 再重复上述例程 5 次。
创建单独的导航控制器:
UINavigationController *nc1 = [UINavigationController alloc] initWithRootViewController:vc1];
对导航控制器 nc2 - nc6 再重复 5 次。
将导航控制器添加到选项卡栏控制器
self.tabBarController.viewControllers = [NSArray arrayWithObjects: vc1, vc2, vc3, vc4, vc5, vc6, nil];
上面的所有代码都能完美运行。没有问题。
然后,我将自定义背景图像添加到更多导航控制器:
if (self.tabBarController.moreNavigationController){
if ([self.tabBarController.moreNavigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] ) {
UIImage *image = [UIImage imageNamed:@"navlogo.png"];
[self.tabBarController.moreNavigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
} else {
UINavigationBar *navbar = self.tabBarController.moreNavigationController.navigationBar;
UIImage *headerImg = [UIImage imageNamed:@"navlogo.png"];
[navbar setBackgroundImage:headerImg forBarMetrics:UIBarMetricsDefault];
}
}
这也很好用。没有问题
由于我的自定义背景包含客户端的徽标死点,因此我需要删除默认情况下显示为“更多”的 titleView 的文本。注意,我说的不是导航按钮的文字,而是导航栏中间的标签。
从逻辑上讲,人们会假设这会起作用:
UILabel *label = [[UILabel alloc] init];
label.text = @"";
self.tabBarController.moreNavigationController.navigationItem.titleView = label;
...因为我在所有单独的视图控制器中都这样做,用 self.navigationItem.titleView 代替 self.tabBarController.moreNavigationController 等。
但这不起作用!我可以使用完全相同的代码成功更改所有导航控制器上的背景图像和 titleView 文本(再次,用 self.navigationController.navigationItem 替换 moreNavController 的东西......)。但是,在应用程序委托中,我只能设置背景图像,而不能设置更多导航控制器的标题视图。
任何解决方案将不胜感激。
VB