zoukankan      html  css  js  c++  java
  • iOS-导航控制器

    一、UINavigationController
    1.常见方法
    1> 将子控制器vc压入栈中
    [self.navigationController pushViewController:vc animated:YES];
    
    2> 出栈(弹出栈顶控制器)
    [self.navigationController popViewControllerAnimated:YES];
    
    3> 直接跳到栈底控制器(回到根控制器)
    [self.navigationController popToRootViewControllerAnimated:YES];
    
    2.使用原理
    1> 导航控制器内部有个viewControllers栈来存放所有的子控制器
    2> 展示在导航控制器上面的永远是栈顶控制器的view
    
    3.一般情况下,导航栏上面显示什么内容,由当前栈顶控制器的navigationItem属性决定
    * navigationItem.title : 导航栏的中间标题(也可以直接通过控制器的title属性设置标题)
    * navigationItem.titleView : 导航栏的中间控件
    * navigationItem.leftBarButtonItem : 导航栏左边的按钮
    * navigationItem.rightBarButtonItem : 导航栏右边的按钮
    
    4.特殊:导航栏左上角的返回按钮 文字 由上一个控制器的navigationItem.backBarButtonItem决定
    * 返回按钮不需要监听(默认的操作就是出栈)
    
    二、利用storyboard完成导航
    1.storyboard中用来跳转的每一根线 都是 一个 UIStoryboardSegue对象
    1> 自动跳转 (从 某个按钮 拖线到 下一个目的控制器)
    
    2> 手动跳转 (从 来源控制器 拖线到 下一个目的控制器)
    * 一定要给segue绑定一个唯一的identifier
    * 如何跳转?通过来源控制器的一个方法来执行这个UIStoryboardSegue对象
    [self performSegueWithIdentifier:@"login2home" sender:nil];
    
    2.UIStoryboardSegue对象
    // 唯一标识
    @property (nonatomic, readonly) NSString *identifier;
    // 来源控制器
    @property (nonatomic, readonly) id sourceViewController;
    // 目的控制器
    @property (nonatomic, readonly) id destinationViewController;
    
    3.通过UIStoryboardSegue对象完成的跳转过程
    1> 初始化(创建)UIStoryboardSegue对象
    
    2> 设置UIStoryboardSegue对象的identifier标识  和 sourceViewController来源控制器
    
    3> 创建目的控制器,并且设置为UIStoryboardSegue对象的destinationViewController属性
    
    4> 在跳转之前,会调用一次sourceViewController的下面方法
    // 后面的sender参数就是当初调用performSegueWithIdentifier:sender:方法传入的参数
    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    
    5> 执行UIStoryboardSegue对象
    [segue perform];
    
    6> 会将destinationViewController目的控制器压入栈中
    
    三、显示本地网页
    // 1.获得about.html文件的URL
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"about.html" withExtension:nil];
    // 2.封装一个请求对象
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    // 3.加载请求
    [webView loadRequest:request];
    
    四、内存警告的处理过程
    1.当控制器接收到内存警告时,会调用 didReceiveMemoryWarning 方法
    
    2.didReceiveMemoryWarning方法内部的默认实现
    1> 首先会检测控制器的view在不在屏幕上
    if (self.view.superview == nil) { // 检测控制器的view在不在屏幕上
        // 就会尝试销毁控制器的view
        // 即将销毁的时候,就会调用控制器的 viewWillUnload
        // 销毁完毕的时候,就会调用控制器的 viewDidUnload方法
    } else {
        // 不销毁控制器的view
    }
    
    3.当需要再次使用控制器的view时,又会调用loadView方法来创建view
    
    4.接着会调用一系列的生命周期方法
    viewDidLoad ---> ......
    
    5.生命周期循环
    loadView --> viewDidLoad --> ..可见.. --内存警告--> didReceiveMemoryWarning ---> viewWillUnload --> viewDidUnload ---再次使用---> loadView
    
    五、UITabBarController
    1.以选项卡的形式展示多个子控制器
    
    2.设置需要显示的子控制器
    1> 设置子控制器数组
    NSArray *viewControllers;
    
    2> 逐个添加子控制器
    // 通过这个方法添加的子控制器会自动添加到viewControllers数组中
    - (void)addChildViewController:(UIViewController *)childController;
    
    3.设置子控制器对应标签的文字和图片
    * 通过子控制器的tabBarItem属性设置
    vc.tabBarItem.title = @"最近"; // 设置标题
    vc.tabBarItem.image = [UIImage imageNamed:@"tab_recent_press.png"]; // 设置图标
    
    六、利用Modal形式展示控制器
    1.如何展示
    // vc就是要展示的新控制器
    [self presentViewController:vc animated:YES completion:^{
        NSLog(@"展示完毕");
    }];
    
    2.如何关闭modal控制器
    [self dismissViewControllerAnimated:YES completion:nil];
    
    七、切换控制器
    1.UINavigationController
    
    2.UITabBarController(不常用)
    
    3.Modal
    
    4.直接更改UIWindow的rootViewController
    
    5.自定义切换效果
  • 相关阅读:
    机器学习 -- 用户画像
    机器学习 -- 分类
    机器学习 -- 聚类
    机器学习 -- 回归
    数据分析 -- 流程
    Nginx + Tomcat7 + redis session一致性问题
    机器学习 -- 信息论
    机器学习 -- 统计与分布
    ElasticSearch 学习一: 基本命令
    问题17:如何将多个小字符串拼接成一个大的字符串
  • 原文地址:https://www.cnblogs.com/DarbyCJ/p/3668553.html
Copyright © 2011-2022 走看看