《iOS创意程序设计家》——第6.3节标签页控制器UITabBarController-阿里云开发者社区

开发者社区> 异步社区> 正文

《iOS创意程序设计家》——第6.3节标签页控制器UITabBarController

简介:
+关注继续查看

本节书摘来自异步社区《iOS创意程序设计家》一书中的第6章,第6.3节标签页控制器UITabBarController,作者 林柏全,更多章节内容可以访问云栖社区“异步社区”公众号查看

6.3 标签页控制器UITabBarController
iOS创意程序设计家
相对于导航栏控制器,标签页控制器(UITabBarController)是将几个具有独立功能的界面使用Tab分隔开来,并定义在界面的下方。这些界面会存放在一个数组里面,而里面每个元素则是UIView-
Controller的类,当然也可以包括导航栏UINavigationController在内。可以通过viewControllers属性或是setViewControllers: animated:方法来设置标签页控制器所控制的界面。

在使用标签页控制器的时候,难免会碰到要使用的标签页过多的情况,这时候,标签页控制器会自动产生一个More的标签页,所有超出界面范围的标签页都会放到这个标签页所包含的界面控制器中。可以通过moreNavigationController属性来取得这个界面控制器。

当标签页被选中之后,可以通过selectedViewController属性来取得选中的界面控制器,或是通过selectedIndex来取得或设置选中的标签页索引值。

与大多数控件一样,标签页控制器也是通过代理者来处理相关的事件的。可以通过delegate属性来指定它的代理者(该代理者必须实现UITabBarControllerDelegate),以处理以下的事件。

用来决定某个标签页是否可以选中
- (BOOL)tabBarController:(UITabBarController *)tabBarController 
shouldSelectViewController:(UIViewController *)viewController;
标签页选中后会触发的事件
- (void)tabBarController:(UITabBarController *)tabBarController 
didSelectViewController:(UIViewController *)viewController;
通知代理者标签页位置即将开始调整
- (void)tabBarController:(UITabBarController *)tabBarController 
willBeginCustomizingViewControllers:(NSArray *)viewControllers
通知代理者标签页位置即将结束调整
- (void)tabBarController:(UITabBarController *)tabBarController 
 willEndCustomizingViewControllers:(NSArray *)viewControllers 
 changed:(BOOL)changed;
通知代理者标签页位置已调整完毕
-(void)tabBarController:(UITabBarController *)tabBarController 
 didEndCustomizingViewControllers:(NSArray *)viewControllers 
 changed:(BOOL)changed;

由于用户可能在执行期间改变标签页的顺序,您可以通过代理者来检测到这个变化。

在XCode中产生一个标签页的应用程序十分简单,尤其是通过故事板的方式。现在就让我们建立一个Tabbed Application的应用程序吧。

请记得勾选“Use Storyboard”以及“Use Automatic Reference Counting”选项。产生后的应用程序会默认产生两个标签页。如果不需要它们,那么可以直接在设计界面中选中该界面后删除它。

由于每个标签页都表示一个界面,因此每个界面都会有一个相对应的界面控制器。因此,接下来,我们要为新的标签页产生一个新的界面控制器。

首先,先添加一个UIViewController的类,并命名为“ThirdViewController”。在产生的过程中请不要勾选“With XIB for user interface”这个选项。
从控件库拉进一个View Controller,并在标识查看窗口(identity inspector)中选择ThirdViewController为这个界面控制器的类。
现在,界面上已经有3个界面控制器了,不过我们的标签页却只有两个。因此,我们需要产生第3个标签页。
连接标签页与界面控制器以产生新的标签页。
产生新标签页的方式与前面连接的方式一样,只要在Tab Bar Controller按住“Control”键不放,然后拉到新的界面控制器上就可以了。这时候你会看到Storyboard Segues的窗口中多了一个“Relationship – viewControllers”的选项,选择这个选项后即可增加一个新的标签页,如图6.12所示。


cdfff9a64d8a295b7af56be440351a2271b12adf

现在,可以在新的界面控制器上直接点选标签页的标题,并修改上面的文字。标签页应用程序的产生大致上就是这样,非常简单吧!

注意:
注意:如果想要在标签页上使用自己设计的图标,您可以在iOS Human Interface Guidelines中找到相关的规定。标签页的图标约为3030(或6060),且必须是黑白的。这是因为系统会在该标签页选中时动态地将黑色部分涂成高亮度的颜色,如果将图标设计成彩色的,整个图标会挤成一团。
虽然按照官方的做法,标签页的图标只能使用黑白色,不过,通过一些技巧,我们仍然可以做到彩色图标的效果。这个技巧的原理是通过贴图的方式贴到标签页控制器的上面,因此原来的标签页上的图标与文字都要消除掉,并且让每张图的大小恰好可以完整地遮住标签页控制器。接着,我们便可以将AppDelegate.m的程序代码修改如下:

-(BOOL)application:(UIApplication *)application 
  didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

  UITabBarController *tab = (UITabBarController *) 
                self.window.rootViewController;
  tab.delegate = self;
  return YES;
}
-(void)tabBarController:(UITabBarController *)tabBarController 
  didSelectViewController:(UIViewController *)viewController {

  // 先删除已加入的图片
  for(UIView *view in tabBarController.tabBar.subviews) {
    if([view isKindOfClass:[UIImageView class]]) {
      [view removeFromSuperview];
    }
  }
  // 再加入相对应的图片
  UIImage *image = [UIImage imageNamed: 
             [NSString stringWithFormat:
             @"Tab0%i",tabBarController.selectedIndex+1]];
  UIImageView *tab = [[UIImageView alloc] initWithImage:image];
  [tabBarController.tabBar addSubview:tab];
}

然后准备好如图6.13所示的彩色图标,每张图都得包含所有的图标,至于上面图标的高亮度颜色或图形则可以自由设计。通过这样的方式,标签页控制器便由黑白变成彩色的了。


b587ea013aeeb12b76b056c28abbf720c9e7a5a6

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
设计前沿:25款精妙的 iOS 应用程序图标
  在这篇文章中,我为大家精心挑选的25款巧妙设计的 iOS 应用程序图标,会激发你未来的工作。苹果的产品总是让人爱不释手,设计精美,对用户使用体验把握得淋漓尽致,iPhone、iPad、iPod和 iMac 等众多苹果产品备受用户追捧。
613 0
AceDeceiver成为首个可利用苹果 DRM设计漏洞感染iOS设备的木马程序
本文讲的是 AceDeceiver成为首个可利用苹果 DRM设计漏洞感染iOS设备的木马程序,近日,我们发现了一个全新系列的iOS恶意软件,能够成功感染非越狱设备,我们将其命名为“AceDeceiver”。
1335 0
《Android程序设计》一1.3 SDK的组件
本节书摘来自华章出版社《Android程序设计》一 书中的第1章,第1.3节,作者:G. Blake Meike, Masumi Nakamura,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1652 0
iOS翻页视图控制器UIPageViewController的应用(二)
iOS翻页视图控制器UIPageViewController的应用
30 0
带你读《Java程序设计与计算思维》之三:流程控制
程序设计的过程就是一种计算思维的表现,《Java程序设计与计算思维》结合Java程序设计语言的教学特点,遵循计算思维的方式,图解重要概念,通过大量的范例程序讲解和上机编程实践来指导读者活用Java程序语法,兼顾培养计算思维和学习面向对象程序设计的双目标。
552 0
隐藏tabControl的标签
  一、隐藏和显示tabControl1中的tabpage的方法:                 tabControl1.tabPage1.Parent = tabControl1; // 显示                 tabControl1.
741 0
iOS翻页视图控制器UIPageViewController的应用(一)
iOS翻页视图控制器UIPageViewController的应用
24 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
12049
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载