一、UIApplication
1.简单介绍
(1)UIApplication对象时应用程序的象征,一个UIApplication对象就代表一个应用程序。
(2)每一个应用都有自己的UIApplication对象,而且是单例的,如果试图在程序中新建一个UIApplication对象,那么将会报错提示。
(3)通过[UIApplication shareApplication];可以获得这个单例对象
(4)一个ios程序启动后创建的第一个对象就是UIApplication对象,且只有一个(通过代码获取两个UIApplication对象,打印地址可以看出地址是相同的)
(5)利用UIApplication对象,能进行一些应用级别的操作
2.应用级别的操作示例:
1)设置应用程序图标右上角的红色提醒数字(如QQ消息的时候,图标上面会显示1, 2, 3条新信息等。)
@property (nonatomic)NSInteger applicationIconBadgeNumber;
代码的实现和效果
- (void)viewDidLoad
{
[super viewDidLoad];
//创建并添加一个按钮
UIButton *btn = [UIButton alloc] initWithFrame:CGRectMake(100, 100, 60, 30);
[btn setTitle:@"按钮" forState:UIControlStateNormal];
[btn setBackgroundColor:[UIColor brownColor]];
[btn addTarget:self action:@selector(onClick) forControlEvents:UIControlEventTouchUpInside];
[self.view addSuview:btn];
}
- (void)onClick {
NSLog(@"按钮点击事件");
//错误,只能有一个唯一的UIApplication对象,不能再进行创建
// UIApplication *app = [[UIApplication alloc] init];
//通过shareApplication获取该程序的UIApplication对象
UIApplication *app = [UIApplication sharedApplication];
app.applicationIconBadgeNumber = 123;
}
2)设置联网指示器的可见性
@property(nonatomic, getter = isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible;
代码如下:
//设置指示器的联网动画
app.networkAcivityIndicatorVisible = YES;
3)管理状态栏
从ios7开始,系统提供了2种管理状态栏的方式
a.通过UIViewController管理(每一个UIViewController都可以拥有一个自己的不同的状态栏)
在ios7中,默认情况下,状态栏都是有UIViewController管理的,UIViewController实现下列方法就可以轻松管理状态栏的可见性和样式
状态栏的样式 - (UIStatusBarStyle)preferredStatusBarStyle;
状态栏的可见性 - (BOOL)prefersStatusBarHidden;
#pragma mark - 设置状态栏的样式
- (UIStatusBarStyle) preferredStatusBarStyle
{
//设置为白色
//return UIStatusBarStyleLightContent;
//默认为黑色
return UIStatusBarStyleDefault;
}
#pragma mark - 设置状态栏是否隐藏(否)
- (BOOL)prefersStatusBarHidden
{
return NO;
}
3)openURL:方法
UIApplication有个功能十分强大的openURL:方法
- (BOOL)openURL:(NSURL*)url;
openURL:方法的部分功能有
打电话
UIApplication *app = [UIApplicaton sharedApplication];
[app openURL:[NSURL URLWithString:@"tel://10086"]];
发短信
[app openURL:[NSURL URLWithString:@"sms://10086"]];
发邮件
[app openURL:[NSURL URLWithString:@"mailto://12345@qq.com"]];