[ios]tabbar超过5个后出现的more标签文字修改 以及more、configure界面 修改问题
建议您先看:http://poolo.iteye.com/blog/1833821 关于view层级关系的 [也就是view tree]
简单描述下:
今天开发时候 需要修改more为更多[其实单纯想要修改成中文 直接在项目的info->Localization 改成中文就行了]。在ios开发中当tabbar超过5个(>5)的时候。系统会自动生成一个more标签 标签下标大于等于4就会被放到more页面。
且tab 下的more标签是通过tabbaritems修改的(不信的自己去试试 其他都可以这个不行)。
一、修改more tabbar的文字。
那么如果需要修改掉more应该怎么办呢?
效果:
思路1:
通过获取tabbarItems 然后进行修改
结果:很有趣的是 只有more这个标签不能正常修改其他都可以。[bageValue却可以]
思路2:
根据
tabBarController.moreNavigationController.tabBarController.tabBar的路径获取到
UItabvar然后根据subView的层级关系 获得到UITabBarButtonLabel(左边这个东西是uikit里面没有的 直接对NSObject setText);
代码如下
// // ChangeTabMoreUnit.m // SmartHome_adpter_2 // // Created by liu poolo on 13-3-21. // Copyright (c) 2013年 liu poolo. All rights reserved. // #import "ChangeTabMoreUnit.h" @implementation ChangeTabMoreUnit +(void)changeTabMoreWithTitle:(NSString*) title withVC:(UIViewController*)vc{ if(vc.tabBarController){ if(vc.tabBarController.moreNavigationController){ UITabBar *tb = vc.tabBarController.moreNavigationController.tabBarController.tabBar; UIView *tbb=[[tb subviews] lastObject]; UIView *v=[[tbb subviews]objectAtIndex:1]; NSString* str=title; if([str length]>6){//如果不限制 自己删掉这里 str=[str substringToIndex:6]; NSLog(@"传入的title长度超过6 只显示前6个字"); } CGSize sc=[str sizeWithFont:[UIFont systemFontOfSize:10.0f]]; v.frame=CGRectMake(v.frame.origin.x, v.frame.origin.y, sc.width, v.frame.size.height); [[[tbb subviews]lastObject] setText:str]; }else{ NSLog(@"传入的UIViewController 必须含有tabBarController与moreNavigationController"); } }else{ NSLog(@"传入的UIViewController 必须含有tabBarController与moreNavigationController"); } } @end
二、修改more tabbar的图片。
这个搞起来很复杂。表示搞了半天 还是无法消除掉more的 . . .那个背景。
当然通过层级关系慢慢查可以搞定。
三、修改more的navigationBar
通过moreNavigationController.navigationBar就可以修改了
.moreNavigationController.navigationBar.barStyle=UIBarStyleBlackOpaque
四、修改configure的navigationBar
思路一:这个就麻烦了首先moreNavigationController 是没有提供获取configure那个界面的任何方法,所以通过moreNavigationController方法获取configure的UINavigationBar 失败
思路二:用图层级关系处理。
那么什么时候的window下才有configure呢?
我们看到UITabBarController 有一个UITabBarControllerDelegate 中有一个方法tabBar:willBeginCustomizingItems:此方法在more中点击edit后才会响应。
so我们发现此时是可以获取到configure 的图层级关系的。
所以我们覆写UITabBarController 并且实现它的UITabBarControllerDelegate
并self.delegate = self;
以下为实现UITabBarControllerDelegate的tabBar:willBeginCustomizingItems:
#pragma mark UITabBarDelegate Methods - (void)tabBar:(UITabBar *)tabBar willBeginCustomizingItems:(NSArray *)items { AppDelegate *a=(AppDelegate *)[[UIApplication sharedApplication] delegate]; [a logViewTreeForMainWindow]; UIView *l2 = [self.view.subviews objectAtIndex:1]; UINavigationBar *l3_0=[l2.subviews objectAtIndex:0]; //l3_0代表 configure UINavigationBar [l3_0 setBarStyle:UIBarStyleBlack]; UINavigationItem *rightButton=(UINavigationItem *)[l3_0.subviews objectAtIndex:2]; //rightButton代表 configure UINavigationBar右侧按钮 rightButton.title=@"完成"; }
上面的 objectAtIndex:1 objectAtIndex:0这些的是固定不变的 如果想自己查看为什么在方法体内部执行一次查看当前全部层级关系即可。
其实l2就是整个configure的层级了。爱怎么改怎么改了。
相关推荐
在iOS应用开发中,TabBar是一个非常重要的组件,它用于展示应用的主要功能模块,并且通常位于屏幕底部。本文将深入探讨iOS TabBar的使用、自定义以及与图片资源的关联。 首先,TabBar是由苹果提供的UIKit框架中的...
在iOS应用开发中,TabBar是一种常见的用户界面组件,它允许用户在多个视图之间进行切换。本篇文章将深入探讨如何在iOS中实现一个独特的中间凸起圆形的TabBar,模仿闲鱼应用的设计效果。我们将涉及到Swift编程语言、...
iOS tabbar navigation 控件结合实例。可以看下,很有参考价值。强烈推荐。
在iOS应用开发中,TabBar是一个非常常见的组件,它用于展示多个主要功能模块,并允许用户在这些模块之间轻松切换。自定义TabBar可以为应用程序提供更个性化的用户体验,使其与品牌形象更加贴合。本项目“ios-自定义...
在iOS应用开发中,TabBar是用户界面的重要组成部分,它通常位于屏幕底部,用于展示主要功能模块间的切换。淘宝App的TabBar设计独特,不仅具备基础功能,还具有动态隐藏和显示的效果,使得用户界面更加灵活和友好。...
对于每个TabBarItem对应的ViewController,我们可以为其添加一个UINavigationController,这样当用户点击该标签时,会显示一个带有NavigationBar的界面。在上面的例子中,我们可以在初始化每个ViewController后,为...
在iOS应用开发中,TabBarController是用户界面设计中常见的组件,用于展示多个主要功能区域,每个区域通常对应一个底部的标签。然而,苹果的原生TabBar可能无法满足所有设计需求,尤其是当需要实现中间按钮突出或者...
在iOS应用开发中,自定义TabBar和NavigationBar是常见的需求,可以为用户提供更个性化的界面体验。本篇文章将深入探讨如何在iOS应用中实现自定义TabBar和NavigationBar,以及涉及的相关知识点。 首先,我们来讨论...
在iOS应用开发中,TabBar是用户界面(UI)中的一个重要组成部分,用于提供多视图间的切换功能。系统默认的TabBar虽然实用,但有时不能满足开发者或设计师对个性化界面的需求。因此,自定义TabBar成为了提升应用独特...
在iOS应用开发中,UI设计和用户体验是至关重要的部分,其中Tabbar和Navigation Bar是两个基本且关键的组件。本文将深入探讨如何在iOS中实现自定义Tabbar和导航条,以便为用户提供更加个性化的交互体验。 首先,我们...
在iOS应用开发中,Tab Bar Controller是用户界面中常见的组件,用于展示多个主要功能区域,每个区域通常对应一个单独的导航控制器或者视图控制器。在iOS SDK中,苹果提供了预设的UITabBarController,但有时开发者...
AnimatedTabBar是一个Swift UI模块库,用于向iOS tabBar项目和图标添加动画。.zip
在iOS应用开发中,TabBar是用户界面中最常见的组件之一,用于展示多个主要功能模块的入口,用户可以方便地在各个模块之间切换。本示例着重讲解如何在TabBar的中间item实现突出效果,并通过push方式进入子控制器,...
在iOS开发中,TabBar是应用界面中常见的一种组件,用于展示多个主要功能间的切换。标题"ios-带有动画效果的tabbar.zip"表明这个压缩包包含了一个实现带有动画效果的自定义TabBar的示例代码。描述中的“挺简单易用”...
在iOS开发中,TabBar是应用界面中常见的一种底部导航组件,它允许用户在不同的视图控制器间切换,提供简洁的交互方式。"ios-咸鱼tabBar.zip" 文件很可能包含了一个模仿咸鱼应用风格的TabBar实现。咸鱼App是阿里巴巴...
在iOS应用开发中,TabBar是用户界面的重要组成部分,它为用户提供了一种便捷的方式来在不同的视图控制器之间切换。本文将深入探讨如何在iOS中实现自定义TabBar,并结合描述中的关键点,介绍相关的知识点。 首先,...
在iOS应用开发中,选项卡(Tab Bar)是一种常见的用户界面元素,用于提供多视图间的切换,使得用户可以通过点击不同的图标或文字来访问各个功能模块。本教程将详细介绍如何在iOS项目中简单实现一个`ios-tabbar`,并...
在iOS应用开发中,TabBar和NavigationBar是两个非常重要的组件,它们构成了用户界面的主要导航结构。TabBar通常位于屏幕底部,用于切换不同的视图控制器,而NavigationBar则位于顶部,显示当前页面的标题并提供返回...
在iOS应用开发中,TabBar是用户界面中最常见的组件之一,用于展示多个主要功能选项,让用户可以方便地在不同视图之间切换。本教程聚焦于使用Swift实现一个自定义的TabBar,尤其关注如何在iOS 12及更高版本中使TabBar...
在iOS应用开发中,TabBarController是用户界面常见的一种组件,用于展示多个子控制器,并通过底部的TabBarItem进行切换。在默认情况下,TabBarItem通常具有系统预设的颜色和样式。然而,为了实现更个性化的用户体验...