首先看则新闻:
iOS 6也玩功能彩蛋 顶部状态栏会变色
以往的彩蛋只会出现在各大厂商开发的游戏大作中,而如今苹果公司也玩起了彩蛋?
在上周WWDC 2012苹果研发者大会上,苹果公司曝光了其新系统iOS 6的近200多项新功能,虽然没有什么特别的惊喜,但也足以让果粉大饱眼福。可细心的玩家在下载了iOS 6预览版之后,竟发现了好多有趣的苹果公司尚未公之于众的细节,比如同性恋图标,最有意思的是,屏幕顶部状态栏的颜色会发生变化。
iOS 6预览版 顶部状态栏颜色变化(图片来自网络)
iOS 6预览版 顶部状态栏颜色变化(图片来自网络)
iOS 6预览版 顶部状态栏颜色变化(图片来自网络)
由上图可以看出,随着打开应用程序的不同,顶部状态栏的颜色也发生了变化。不过并不是所有的应用都支持状态栏变色,目前大多数应用均不支持这个功能,只有极少数几个应用的颜色会改变。这是不是一项新功能?以后会不会有越来越多的应用会支持变色?我们不得而知,不过希望苹果公司的开发者们能带给果粉更多的惊喜。
这个今天可把我害惨了。我还以为什么挡住了状态栏,各种暴力调试,发现没什么问题。
NavigationBar的风格、标题怎么设置?back button怎么设置?
导航栏风格
导航控制器可以用几种不同的风格来显示自身。默认风格就是标准的灰色外观。目前支持三种不同的风格,如表3-1所示。
表3-1
风 格 | 描 述 |
UIBarStyleDefault | 默认风格;灰色背景,白色文字 |
UIBarStyleBlackOpaque | 纯黑色背景,白色文字 |
UIBarStyleBlackTranslucent | 透明黑色背景,白色文字 |
风格是通过barStyle属性来设置的。这个属性属于导航控制器,而不是视图控制器,因此在各个视图之间来回切换时,此属性可以保持一致:
self.navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent;
按我的理解,navigationBar的标题实际上是当下视图控制器的名字,至于navigationItem则是一个集合,它的一个property叫做title,你可以认为它和视图控制器的title是一个东西。使用navigationItem是有条件的,因为它依赖于视图控制器的存在,它可以从视图控制器处获取title,也可以通过设置它来修改navigationItem。但前提是视图控制器存在。一个小技巧:设置当前视图控制器的title为应用名:
self.title = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"];
使用其navigationItem时,首先要确保UINavigationController 视图已经加载到ViewController中。
其代码为:
- [[UINavigationController alloc] initWithRootViewController:viewController];
nil
。也就是说完成了上面的步骤之后,还是只有navigationItem不是nil,它里面的一些控件东西还是nil的,譬如backBarbuttonItem。
When this property is nil, the navigation item uses the value in its title property to create an appropriate back button. If you want to specify a custom image or title for the back button, you can assign a custom bar button item (with your custom title or image) to this property instead.虽然这个property可能一直是nil,但是navigation Item会利用它自身的title property来创建一个back button。当用户自己创建了一个back button,并把它与这个property相连的时候,就会使用新的backbutton。在这里,我们着重阐述了navigation item的title和back button的来源。适用于back button的使用方法,也适用于另外的Item。
如何设置Next Page button和back button?
我们定义Next Page button在第一个视图控制器的页面,我们要自行创建一个RightBarButtonItem,在这个button item里完成打开下一页的行为。
UIBarButtonItem *nextButton =[[UIBarButtonItem alloc] initWithTitle:@"Next"
style:UIBarButtonItemStyleBordered
target:self action:@selector(nextPage)];
[self.navigationItem setRightBarButtonItem:nextButton animated:YES];
- (void)nextPage{
NextViewController *nextController = [[NextViewController alloc]initWithNibName:@"NextViewController" bundle:nil];
[self.navigationController pushViewController:nextController animated:YES];
}
就是那么简单的2部分。而back button就更方便:
UIBarButtonItem *temporaryBarButtonItem=[[UIBarButtonItem alloc] init];
temporaryBarButtonItem.title=@"Back";
self.navigationItem.backBarButtonItem = temporaryBarButtonItem;
当然也可以参照上面的例子,这样写:
UIBarButtonItem *backButton =[[UIBarButtonItem alloc] initWithTitle:@"Back"
style:UIBarButtonItemStyleBordered
target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
此时,back是一个默认行为,不需要我们用代码去实现,设置target和action均为nil。
关于按钮的风格:
定义按钮的风格。可用的风格有:
UIBarButtonItemStylePlain:默认按钮风格;按下时会闪动。如果你希望禁用一个已有的导航栏按钮,有两种方法可以选择。如果要令按钮完全消失,可以用你稍早之前看到的按钮属性,将其设置为nil:UIBarButtonItemStyleBordered:与UIBarButtonItemStylePlain相同,但显示的按钮有边框。UIBarButtonItemStyleDone:显示一个蓝色按钮,提醒用户编辑完毕时应该点触(tap)该按钮。
如果要令按钮仍然可见,只是变灰无法使用,可以将按钮的enabled属性设置为NO,就能够禁用按钮:
- self.navigationItem.leftBarButtonItem = nil;
- myButton.enabled = NO;