IOS笔记046-UIApplication

UIApplication

每一个应用都有自己的UIApplication对象,而且是单例的
通过[UIApplication sharedApplication]可以获得这个单例对象
一个iOS程序启动后创建的第一个对象就是UIApplication对象

单例对象的获取

UIApplication *app = [UIApplicationsharedApplication];

隐藏状态栏

// 1、隐藏状态栏,ios7以后默认是由控制器控制的,如果要用UIApplication控制请在info.plist中设置一个参数

// UIViewController-based status bar system NO;

[app setStatusBarHidden:YES];

显示提醒框

// 2、引用提醒框,IOS8以后必须注册通知才能使用

app.applicationIconBadgeNumber = 14;

UIUserNotificationSettings *setting = [UIUserNotificationSetting ssettingsForTypes:UIUserNotificationTypeBadgecategories:nil];

// 注册通知

[app registerUserNotificationSettings:setting ];

设置网络加载状态,在状态栏显示

// 3、设置联网状态,在状态栏显示

app.networkActivityIndicatorVisible = YES;

打开网页或通话面板

// 4、打开网页,打电话,发邮件等

// URL : 协议头+域名(路径)  http/ftp/tel等

// 系统通过协议头来判断具体要打开何种软件

UIApplication *app = [UIApplicationsharedApplication];

NSURL *url = [NSURLURLWithString:@"http://www.qq.com"]; // http 会打开Safari

[app openURL: url];

info.plist文件

可以通过mainBundle 获取info.plist的一些属性。下面是一些已经定义好的。

@property (readonly, copy) NSString *bundleIdentifier;

@property (readonly, copy) NSDictionary *infoDictionary;

@property (readonly, copy) NSDictionary *localizedInfoDictionary;

常见属性(红色部分是用文本编辑器打开时看到的key)

Localiztion native development region(CFBundleDevelopmentRegion)-本地化相关

Bundle display name(CFBundleDisplayName)-程序安装后显示的名称,限制在10-12个字符,如果超出,将被显示缩写名称

Icon file(CFBundleIconFile)-app图标名称,一般为Icon.png

Bundle version(CFBundleShortVersionString)-应用程序的版本号,每次往App Store上发布一个新版本时,需要增加这个版本号

Main storyboard file base name(NSMainStoryboardFile)-主storyboard文件的名称

Bundle identifier(CFBundleIdentifier)-项目的唯一标识,部署到真机时用到

pch文件

项目的Supporting files文件夹下面有个“工程名-Prefix.pch”文件,也是一个头文件

pch头文件的内容能被项目中的其他所有源文件共享和访问

一般在pch文件中定义一些全局的宏

在pch文件中添加下列预处理指令,然后在项目中使用Log(…)来输出日志信息,就可以在发布应用的时候,一次性将NSLog语句移除(在调试模式下,才有定义DEBUG)

#ifdef DEBUG

#define Log(...) NSLog(__VA_ARGS__) // … 表示宏可变参数,__VA_ARGS__ 表示函数可变参数

#else

#define Log(...)

#endif

AppDelegate

每一个工程都会自动生成一个代理文件,这个代理文件的一些方法如下,还有调用顺序。

// 1、启动完成后调用

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

// Override point for customization after application launch.

return YES;

}

// 3、应用程序失去焦点后调用,再进入后台

- (void)applicationWillResignActive:(UIApplication *)application {

// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.

// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.

}

// 4、应用进入后台调用,接电话,锁屏,按下home建等操作

- (void)applicationDidEnterBackground:(UIApplication *)application {

// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.

// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.

}

// 5、应用进入前台后调用,先进入前台再获得焦点 2

- (void)applicationWillEnterForeground:(UIApplication *)application {

// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.

}

// 2、应用获得焦点,可与用户交互

- (void)applicationDidBecomeActive:(UIApplication *)application {

// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.

}

// 应用终止运行会调用,实际上得调用也无法测试

- (void)applicationWillTerminate:(UIApplication *)application {

// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.

// Saves changes in the application‘s managed object context before the application terminates.

[self saveContext];

}

由前台进入后天过程:先失去焦点,再进入后台。

有后台进入前台过程:先进入前台,再获得焦点。

main.m文件

每个程序都要有个main函数,ios也一样。默认位置在Supporting Files文件下。

int main(int argc, char * argv[]) {

@autoreleasepool {

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegateclass]));

}

}

在Xcode中 main函数只调用了一个方法 UIApplicationMain 。

UIApplicationMain 方法做了一些初始化的操作:

1、第三个参数:创建一个 UIApplication 对象,默认nil就返回 UIAplication 对象

2、第四个参数:创建一个 UIApplicationDelegate 代理对象,然后设置UIApplication.delegate = UIApplicationDelegate

3、设置一个主循环,可保持程序一直出去运行状态,开始接受事件

4、加载info.plist ,然后加载main.storyboard

 

main.storyboard 的加载过程

1、初始化一个窗口Window

2、加载main.storyboard 并且初始化控制器

3、设置view的rootViewController并显示到屏幕

真正的加载过程

在代理方法中使用,程序启动完成后创建窗口并显示。

大概过程如下:

// 1、创建窗口

self.window = [[UIWindowalloc] initWithFrame:[UIScreenmainScreen].bounds];

self.window.backgroundColor = [UIColorredColor];

// 2、创建一个控制器,并指定window的父控制器

UIViewController *vc = [[UIViewController alloc] init];

self.window.rootViewController = vc;

// 3、显示窗口

[self.window makeKeyAndVisible];

关于第二步创建一个控制器,还有几种方法

方法1:使用代码

// 方法1: 代码

UIViewController *vc = [[UIViewControlleralloc] init];

self.window.rootViewController = vc;

方法2:使用storyboard

// 方法2: storyboard创建

// 参数bundle为nil时指 mainBundle

UIStoryboard *story = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

// 默认加载箭头指向的那个控制器

UIViewController *vc1 = [story instantiateInitialViewController];

// 使用标识加载控制器,可在storyboard 里进行设置

UIViewController *vc2 = [story instantiateViewControllerWithIdentifier:@"green"];

self.window.rootViewController = vc1;

方法3:使用xib

// 方法3: xib创建

/* 注意事项

通过xib创建控制器的view

一定要描述xib的文件拥有者是控制器,也就是说这个xib是用来描述控制器

*/

UIViewController *vc3 = [[ViewController alloc] initWithNibName:@"abc" bundle:nil];

//UIViewController *vc3 = [[ViewController alloc] init];

/**

加载跟类名相同的xib

如果描述控制器View的xib跟控制器的类名相同,就会去加载

只有控制器的init方法底层会调用initWithNibName:bundle:

只要通过initWithNibName:bundle:初始化控制器,并且nibName为nil,就会执行以下几步。

SLQViewController类型

1.寻找有没有跟控制器类名同名但是不带Controller的xib,如果有就会去加载(XXX.xib)

2.寻找有没有跟控制器类名同名的xib,如果有就会去加载(SLQViewController.xib)

3.如果都没有找到,创建空的view,

*/

UIViewController *vc4 = [[ViewController alloc] initWithNibName:nil bundle:nil];

self.window.rootViewController = vc3;

通过xib创建系统会做很多判断,一定要注意。

默认创建的空view是近乎透明的

// 2、创建一个控制器

// 创建UIViewController控制器,控制器的view并没有创建

// 控制器的view懒加载:第一次使用的时候才会去加载,并不是创建UIViewController控制器的时候去加载

UIViewController *vc = [[UIViewControlleralloc] init];

// vc.view.backgroundColor = [UIColor clearColor]; //类似设置clearColor属性

// vc.view.alpha = 1;

// 默认创建的空view是近乎透明的,不能穿透。

self.window.rootViewController = vc;

自定义view需要注意的地方

在控制器中的loadView方法中自定义自己的view

// 默认loadView可以加载storyboard和xib描述的控制器的view

// 如果想自定义view,可以在这里进行操作

- (void)loadView

{

// 如果控制器是窗口的根控制器就可以不用设置尺寸

self.view = [[UIView alloc] initWithFrame:CGRectZero];

self.view.backgroundColor = [UIColoryellowColor];

}

// view的getter方法类似下面

//- (UIView *)view

//{

//    if (_view == nil) {

//        [self loadView];

// 。。。。。

//        [self viewDidLoad];

//    }

//    return _view;

//}

// 在viewDidLoad中打印控制器的尺寸不准确,通常在viewDidAppear

// 控制器的view加载完成的时候调用

- (void)viewDidAppear:(BOOL)animated

{

[super viewDidAppear:animated];

NSLog(@"%@",NSStringFromCGRect(self.view.bounds));

}

UINavigation - 导航控制器

创建过程

// 1、创建窗口

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

self.window.backgroundColor = [UIColorredColor];

// 2、创建控制器

UIViewController *vc = [[FirstViewControlleralloc] init];

// UINavigationController 初始化

// 导航控制器也需要一个根控制器

// 默认导航控制器把根控制器的view添加到导航控制器的view上

UINavigationController *nav = [[UINavigationControlleralloc] initWithRootViewController:vc];

self.window.rootViewController = nav;

// 3、显示窗口

[self.window makeKeyAndVisible];

 导航控制的使用,主要是以下几个方法。

UINavigationController以栈的形式保存子控制器

@property(nonatomic,copy) NSArray *viewControllers;
        @property(nonatomic,readonly) NSArray *childViewControllers;
使用push方法能将某个控制器压入栈
        - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
使用pop方法可以移除控制器
将栈顶的控制器移除
        - (UIViewController *)popViewControllerAnimated:(BOOL)animated;
回到指定的子控制器
        - (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;
回到根控制器(栈底控制器)
        - (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;

添加跳转界面

首先控制器的头文件

然后创建一个控制器

最后入栈。

- (IBAction)jumpToSecond:(id)sender

{

// 创建控制器

UIViewController *vc = [[SecondViewControlleralloc] init];

// 入栈

[self.navigationControllerpushViewController:vc animated:YES];

// 修改顶部标题

self.navigationItem.title = @"上一页";

}

回到上一个View中

- (IBAction)jumpToFirst:(id)sender

{

// 弹出最底部的view

[self.navigationControllerpopToRootViewControllerAnimated:YES];

}

- (IBAction)jumpToPre:(id)sender

{

// 弹出最顶部的view

[self.navigationControllerpopViewControllerAnimated:YES];

}

时间: 2024-10-15 21:30:50

IOS笔记046-UIApplication的相关文章

iOS笔记:Objective-C自定义NSLog宏

/*  XCode LLVM XXX - Preprocessing中Debug会添加 DEBUG=1 标志  */ #ifdef DEBUG #define NSLog(FORMAT, ...) fprintf(stderr,"%s:%d\t%s\n",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:FORM

学习ios笔记第一天的C语言学习记录

c语言基础学习 int num1 = 15; int num2 = 5; int temp = 0; //先把num1放到temp里 temp = num1; //先把num2放到num1里 num1 = num2; //先把temp放到num2里 num2 = temp; 算数运算符 +加法运算 -减法运算符 *乘法运算符 /除法运算符  ------整型相除取整,除数不为0 %取余运算符 ------两边均为整数 ++递增运算-------运算符在前,先执行:运算符在后,后执行: --递减运

iOS 笔记-incompatible pointer types initializing 'NSMutableString *' with an expression of type 'NSString *'警告处理

记录下来,以防止再犯错 代码如下 NSString *userHeader = [userInfoDictionary objectForKey:@"photo"]; NSMutableString *mutableuserHeader = [NSMutableString stringWithString:userHeader]; //设置用户头像 NSRange range = [mutableuserHeader rangeOfString:@".."]; [

iOS笔记(常用的一些知识点)

这是我在公司做项目时,顺便做的一些笔记....... //1.iphone开发--改变UIPageControl里的小点的颜色 pageControl.currentPageIndicatorTintColor = [UIColor blackColor]; pageControl.pageIndicatorTintColor = [UIColor grayColor]; //2.ios如何让状态栏变成白色的 [[UIApplication sharedApplication]setStatus

麦子学院ios笔记:IOS把图片缓存到本地的几种方法

把ios的图片缓存到本地的方法有几种?现在来看看学生在麦子学院学习ios开发的笔记中有讲到哪几种方法呢? <code>把图片缓存到本地,在很多场景都会用到,如果是只储存文字信息,那建一个plist文件,或者数据库就能很方便的解决问题,但是如果存图片到沙盒就没那么方便了.这里介绍两种保存图片到沙盒的方法. </code> 一.把图片转为base64的字符串存到数据库中或者plist文件中,然后用到的时候再取出来 <code class="hljs" obje

[iOS笔记]《编写高质量iOS与OS X代码的52个有效方法》:1.熟悉Objective-C

简介: 最近公司项目收尾,可以有时间看看书了.<编写高质量iOS与OS X代码的52个有效方法>这本书讲解了很多iOS开发的技巧和规范,大力推荐! 下面是自己看书时整理的笔记,照惯例先上目录: 目录: 第一章:熟悉Objective-C 第二章:Object.Message.Runtime 第三章:接口与API设计 第四章:Protocol与Category 第五章:内存管理 第六章:Block与GCD 第七章:系统框架 第一章    熟悉Objective-C 第1条:了解Objective

2015/10/6 iOS 笔记 细节 应用中常见文件

1,工程名-info.plist文件 bundle display name 应用显示的名称(10到12个字符,超过显示...) bundle identifier  应用的唯一标识 com.xx.hhxx bundle version 软件版本号 supported interface orientation 屏幕旋转 默认支持三种模式 2,应用中常见文件 工程名-Prefix.pch (新版没有这个文件了) pch头文件的内容能被项目中得其他所有源文件共享和访问 一般在pch头文件中定义一些

IOS笔记046-UIApplication/导航控制器

阅读目录 UIApplication info.plist文件 pch文件 AppDelegate main.m文件 UINavigation - 导航控制器 storyboard实现控制器之间的跳转 回到顶部 UIApplication 每一个应用都有自己的UIApplication对象,而且是单例的 通过[UIApplication sharedApplication]可以获得这个单例对象 一个iOS程序启动后创建的第一个对象就是UIApplication对象 单例对象的获取 UIAppli

【IOS笔记】Views

Views Because view objects are the main way your application interacts with the user, they have many responsibilities. Here are just a few: 通过view对象是与用户交互的主要方式,它们有很多责任,下面是其中一些: Layout and subview management   布局 A view defines its own default resizin