我很惊讶没有被问到“更多”: - )
我的应用是一个标准的标签栏控制器,有多个部分。每个部分(选项卡)都包含一个控制几个视图控制器的导航控制器(您的基本tableview + detailview类型的设置)。现在我已经添加了第6个选项卡,iOS会创建默认的“更多”选项卡来控制最后两个选项卡。我需要消除导航栏 middle 中的“更多”文本(注意:不是按钮文本,也不是标签本身的标题),并将自定义背景图像应用到导航栏。
注意:这个问题是关于自定义“更多”导航栏 - 我已经成功修改了所有非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的东西......)。但是,在app delegate中,我只能设置背景图像,而不能设置More导航控制器的titleView。
任何解决方案都将不胜感激。
VB
答案 0 :(得分:1)
原来,我的原始代码是正确的,只是在错误的地方。
UILabel *label = [[UILabel alloc] init];
label.text = @"";
self.tabBarController.moreNavigationController.navigationBar.topItem.titleView = label;
但是,我之前在之前执行了这个我添加了tabBarController作为我的rootViewController
正确的顺序是:
self.window.rootViewController = self.tabBarController;
UILabel *label = [[UILabel alloc] init];
label.text = @"";
self.tabBarController.moreNavigationController.navigationBar.topItem.titleView = label;
答案 1 :(得分:0)
,例如,在应用程序中:选项卡控制器iOS模板的didFinishLaunchingWithOptions:
// Override point for customization after application launch.
UITabBarController *tabBarController = (UITabBarController *)(self.window.rootViewController);
UINavigationController *moreNavigationController = tabBarController.moreNavigationController;
moreNavigationController.navigationBar.topItem.title = @"";
这会更改导航栏标题,但会将标签标题标题保留为“更多”。
答案 2 :(得分:0)
我找到了一个
Swift 2.2
将其放在 didFinishLaunchingWithOptions
中func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool)
{
navigationController.navigationBar.topItem?.rightBarButtonItems = nil
navigationController.viewControllers.first?.title = ""
}
实施此委托方法
Component *comp = (Component*)malloc(sizeof(Component));
comp->positions = objects[k][i].mesh.positions.data();
comp->normals = objects[k][i].mesh.normals.data();
[self setupVBOs:i objectComponent:objects[k][i] structure:&comp];
glVertexAttribPointer(_positionSlot, 3, GL_FLOAT, GL_FALSE, 0, 0);
WT_GL_ASSERT(glEnableVertexAttribArray(_positionSlot));
glVertexAttribPointer(_normalsSlot, 3, GL_FLOAT, GL_FALSE, 0, (void*)sizeof(comp->positions));
WT_GL_ASSERT(glEnableVertexAttribArray(_normalsSlot));
这也将删除更多导航控制器导航栏顶部的编辑按钮。
答案 3 :(得分:0)
发布Swift5版本,因为它花了我很多时间才能使其正常工作
moreNavigationController.viewControllers[0].tabBarItem = UITabBarItem(title: "My Title", image: UIImage(named: "MoreTab")!, tag: 1111)
moreNavigationController.navigationBar.topItem!.title = "My Title"
请注意,更改moreNavigationController.tabBarItem效果不佳。我在扩展UITabBarController的类的viewDidLoad()中执行此操作
答案 4 :(得分:-1)
这可能不适用于线程上的每个人,但对我来说......我有一个带有>的tabBarController; 5项...我需要在自动生成的moreNavigationController上设置标题...就像在目标detailviewcontroller的viewDidLoad方法中指定self.title = @“title”一样简单。
答案 5 :(得分:-3)
您可以在viewDidLoad函数
中更改标题self.title = @""