UIApplication
UIApplication对象是应用程序的象征 .
每一个应用程序都有自己的 UIApplication对象,而且是单例的.
通过 [UIApplication sharedApplication]可以获得这个单例对象
一个iOS程序启动后创建的第一个对象就是 UIApplication 对象
利用 UIApplication 对象,能进行一些应用级别的操作
代码,验证单例:
首先会报错 'There can only be one UIApplication instance'
将 app3 注释之后,打印结果:
可是看出,地址是相同的 .
应用级别的几个常用操作:
// 1 图标右上角的数字
//0代表清除图标右上角的数字
//2 设置显示联网状态
会出现"转动的菊花"
// 3 . openURL
URL 是一个资源的唯一路径
URL 的组成 == 协议头://主机域名/路径
网络资源URL的组成 == http://主机域名/路径
示例:
http://www.baidu.com/adb/images/1.png
本地的 , 协议头是 file 由于是本地, 主机域名可以不写 .
本地文件资源URL的组成 file:///Users/apple/Desktop/1.png
注意上面是三个 ///
[app openURL:[NSURL URLWithString:@"http://ios.itcast.cn"]];
以上代码会调用 safri打开网址
如果是图片什么的, 会自动调用相应的程序 ,以上是 http的,所以用 safri
[app openURL:[NSURL URLWithString:@"tel://10086"]];
以上是打给 10086
其他一些 openURL的示例:
>打电话
>发短信
>发邮件
>打开网页资源
>打开其他程序
4 .管理状态栏
从iOS7开始 ,系统提供了2种管理状态栏的方式
> 通过UIViewController管理(每一个UIViewController都可以拥有不同的状态栏)
> 通过UIApplication管理(一个应用程序的状态栏都由它统一管理)
默认情况下,是由 UIViewController进行管理的,UIViewController实现下列方法就可以轻松管理状态栏的可见性和样式
>状态栏的样式
使用 UIApplication
但是以上代码没有效果, 因为ios7默认给控制器管理 ,如果想给 UIApplication管理 ,到 info.plist中
添加:
View controller-based status bar apperence
value 给定为 NO
这样既可不让控制器管理状态栏
但是以上代码没有效果, 因为ios7默认给控制器管理 ,那我真的想给 application管理呢?
到 info.plist里面
新加一个
value 是 NO ,这样即可 不让控制器管理状态栏
再次运行就好了
UIApplication对象是应用程序的象征 .
每一个应用程序都有自己的 UIApplication对象,而且是单例的.
通过 [UIApplication sharedApplication]可以获得这个单例对象
一个iOS程序启动后创建的第一个对象就是 UIApplication 对象
利用 UIApplication 对象,能进行一些应用级别的操作
代码,验证单例:
-(void)viewDidLoad
{
[super viewDidLoad]
UIApplication *app = [UIApplication sharedApplication];
UIApplication *app2= [UIApplication sharedApplication];
UIApplication *app3= [[UIApplication alloc] init];
NSLog(@"%p,%p,%p",app,app2,app3);
}
首先会报错 'There can only be one UIApplication instance'
将 app3 注释之后,打印结果:
0x8d192c0 0x8d192c0
可是看出,地址是相同的 .
应用级别的几个常用操作:
// 1 图标右上角的数字
UIApplication *app = [UIApplication sharedApplication];
//0代表清除图标右上角的数字
app.applicationIconBadgeNumber =0 ;
//2 设置显示联网状态
app.networkActivityIndicatorVisible = YES ;
会出现"转动的菊花"
// 3 . openURL
URL 是一个资源的唯一路径
URL 的组成 == 协议头://主机域名/路径
网络资源URL的组成 == http://主机域名/路径
示例:
http://www.baidu.com/adb/images/1.png
本地的 , 协议头是 file 由于是本地, 主机域名可以不写 .
本地文件资源URL的组成 file:///Users/apple/Desktop/1.png
注意上面是三个 ///
[app openURL:[NSURL URLWithString:@"http://ios.itcast.cn"]];
以上代码会调用 safri打开网址
如果是图片什么的, 会自动调用相应的程序 ,以上是 http的,所以用 safri
[app openURL:[NSURL URLWithString:@"tel://10086"]];
以上是打给 10086
其他一些 openURL的示例:
-(BOOL)openURL:(NSURL*)url;
>打电话
[app openURL:[NSURL URLWithString:@"tel://10086"]];
>发短信
[app openURL:[NSURL URLWithString:@"sms://10086"]];
>发邮件
[app openURL:[NSURL URLWithString:@"mailto://10086"]];
>打开网页资源
[app openURL:[NSURL URLWithString:@"http://www.baidu.com"]];
>打开其他程序
4 .管理状态栏
从iOS7开始 ,系统提供了2种管理状态栏的方式
> 通过UIViewController管理(每一个UIViewController都可以拥有不同的状态栏)
> 通过UIApplication管理(一个应用程序的状态栏都由它统一管理)
默认情况下,是由 UIViewController进行管理的,UIViewController实现下列方法就可以轻松管理状态栏的可见性和样式
>状态栏的样式
-(UIStatusBarStyle)perferredStatusBarStyle;
使用 UIApplication
app.statusBarHidden = YES;
app.statusBarStyle = UIStatusBarStyleLightContent;
但是以上代码没有效果, 因为ios7默认给控制器管理 ,如果想给 UIApplication管理 ,到 info.plist中
添加:
View controller-based status bar apperence
value 给定为 NO
这样既可不让控制器管理状态栏
但是以上代码没有效果, 因为ios7默认给控制器管理 ,那我真的想给 application管理呢?
到 info.plist里面
新加一个
value 是 NO ,这样即可 不让控制器管理状态栏
再次运行就好了