iOS复习记录日记10-程序加载过程及导航控制器UINavigationController[2020]

前文

应用程序启动过程
文件appDelegate是系统帮我们创建的,但是在ios13后模式就更改了
变为了SceneDelegate,如果需要ios9-ios13全适配,
那么代码要在SceneDelegate和appDelegate写入.
他们的大意几乎是相同的,不同view窗口的加载,关闭,之类的…

main.m文件中已经把appDelegate这个类,作为了代理了,实现里面相应的方法就可以了
值得再次强调的是 ios13中,并不会走appDelegate这个类之前的ios13以下的,
只会走SceneDelegate这个类 设置程序最低兼容ios版本,看警告提示就可以知道了
最后加载配置文件中指定的main.storyboard改成自己的就可以了加载自定义的或是程序的

正文

ios13以下:

  • (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions {
    程序加载完毕的时候会调用此方法

-(void)applicatioinDidBecomeActive
应用变为活跃状态 -(应用开始活跃了)
-(void)applicationWIllResignActive
程序即将不活跃 -(点home 从[活跃]变为[不活跃]) -(来了一个电话)
-(void)applicationDidEnterBackground
程序进入后台 -(点home 从[不活跃]到[后台] )
-(void)applicationWillEnterForeground
程序即将进入前台 -(点了home 选中此窗口之间的加载过程)
-(void)applicationWIllTerminate
应用即将被销毁 -(应用即将被关闭了)
-(void)applicationDidReceiveMemoryWarning
应用接收到内存警告

应用程序销毁有两种情况,如果是home之后拖走是可以正常执行方法的
如果进入了后台 过了一会 是无法执行的
如果要保存用户数据 要在进入后台的时候保存

通过代码的方式加载自定义的控制器

首先删除系统提供的
viewCOntroller.h/.m/main.storyboard
删除info.plist的main为空
在appDelegate.h声明(如果是ios13的话)
@property (strong, nonatomic) UIWindow * window;
self.windows = [UIWindwos alloc]initWithFrame:[[UiScreen mainScreen].bounds];
//设置这个窗口的大小
self.windwos.rootViewController = 创建一个继承uiviewcontroller的类
//设置这个窗口的控制器
self.window makeKeyAndVisible
//设置这个窗口作为程序的主窗口 并可见

控制器的view懒加载

重写继承了uiviewcontroller的类方法为
-(void)loadView; //必须要super viewDidLoad

史诗级重点UINavigationController

多控制管理里面的一种:
导航控制器UINavigationController
将windows.rootViewController设置为nav 这样可以有多个窗口之间的切换
毕竟nav里面可以包括许多的UIviewcontroller
初始化:
UINavigationController *nav = [UINavigationController alloc ]init
initWithRootViewController:xxxx
通过有参构造设置nav的根控制器
nav pushViewController:xxx animated:YES
将xxx控制器放入栈中
popToRootViewControllerAnimated:
返回根控制器
popViewControllerAnimated
返回上个控制器
.viewControllers获得导航控制器的栈内的所有控制器 数组
popToViewController (参1:xxx控制器)
返回到指定的控制器
self.navigationController 获得当前的导航控制器
至于导航控制器栈 我就不写了

通过storyboard使用控制器

在控件盒里面找到UINavigationController
通过拖线选择根控制器
拖动按钮可选择push的控制器 show
返回就必须要通过代码去实现

设置UiNavigationController的内容

这里是NavigationItem
通过代码:
在viewDidLoad加载完毕后 设置控制器导航栏的内容
self.navigationItem.title = @“xxx控制器” 设置控制器标题
self.navigationItem.titleView = uiview 设置为uibiew类型的标题
self.navigationItem.rightitemBarButtonItem/s = UIbarbuttonitem 设置右边的
self.navigationItem.backBarBUttonItem.title= UIbarbuttonitem 设置返回按钮
如果设置了左边的按钮,那么返回按钮就会消失.

在storyboard上面设置
直接在navigationitem里面拖动uibarbuttonitem就可以了
如果不是根控制器,需要手动放入一个navigationitem控件

生命周期

  • (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"%@—>界面加载完成", [self class]);}
  • (void)viewWillAppear:(BOOL)animated {
    NSLog(@"%@ —>界面即将显示", [self class]);}
  • (void)viewDidAppear:(BOOL)animated {
    NSLog(@"%@ —> 界面已经显示出来",[self class]);}
  • (void)viewWillDisappear:(BOOL)animated {
    NSLog(@"%@ —> 界面即将消失", [self class]);}
  • (void)viewDidDisappear:(BOOL)animated {
    NSLog(@"%@ —> 界面已经消失", [self class]);}

导航之前的传值segue

UIStoryBoardSegue
identifier 标记
sourceVIewController 源控制器
destinationViewController 目标控制器
重写prepareForSegue 会有 UIStoryBoardSegue的segue属性
得到这个uiview,在里面添加需要的值.即可
必须是storyboard拖线才会执行

补充
self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
self.window.windowScene = (UIWindowScene*)scene;
如果在ios13的SceneDelegate中写 需要额外加.windowScene = (UIWindowScene*)scene;

发布了15 篇原创文章 · 获赞 0 · 访问量 2559

猜你喜欢

转载自blog.csdn.net/u014270781/article/details/105330307