zoukankan      html  css  js  c++  java
  • (三十四)NavigationController初步

    为了了解底层,首先不基于UIWindow而基于UIWindow来创建App。

    由于Xcode6没有以前的基于UIWindow的空项目,所以选择SingleView,然后删除storyboard,移除BuildSettings里面的main Interface。

    然后在AppDelegate中初始化一个窗口交给成员变量。

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
        
        
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        self.window.backgroundColor = [UIColor whiteColor];
        
        [self.window makeKeyAndVisible];
        
        return YES;
    }
    然后新建导航控制器,使用步骤为:

    1.新建和初始化NavigationController

    2.将UIWindow的rootViewController设置为UINavigationController

    3.使用push方法添加UIView

    管理UIView顺序的是栈,当栈内UIView超过1个时,会显示一个和栈顶下面一个UIView标题名相同的返回按钮,通过点击可以让当前UIView出栈,则新的UIView成为栈顶UIView,每次只显示栈顶的UIView,如果没有UIView,则只显示UIWindow和NavigationController。

    例如下面的程序将两个UIView push到栈中,先显示最后面push进去的UIView。

    Tip:显示的内容永远是栈顶控制器。

    新建视图控制器时,只需要新建相应的控制器类,即可实现UIView和UIViewController的绑定。

        UINavigationController *nav = [[UINavigationController alloc] init];
        
        self.window.rootViewController = nav;
        
        UIViewController *vc1 = [[UIViewController alloc] init];
        vc1.view.backgroundColor = [UIColor grayColor];
        [nav pushViewController:vc1 animated:YES];
        
        UIViewController *vc2 = [[UIViewController alloc] init];
        vc2.view.backgroundColor = [UIColor purpleColor];
        [nav pushViewController:vc2 animated:YES];

    通过UIViewController拿到NavigationController的方法:

    [self.navigationController pushViewController:someController animated:YES];

    弹出的方法:弹出一个

    [self.navigationController popToRootViewControllerAnimated:YES];
    弹出到某个控制器为止,缺点是需要拿到控制器
    [self.navigationController popToViewController: animated:YES];

    弹出到栈底控制器:

    [self.navigationController popToRootViewControllerAnimated:YES];

    Tip:导航条所占高度为44,上面的StatusBar所占高度为20,因此视图应该从64开始布置。

    Tip:push和pop操作不会新建导航栏,所有UIView共用一个导航栏,通过navigationItem来控制显示的内容。

    通过navigationItem.title可以设置标题。

    通过navigationItem.titleView可以设定标题的UIView。

    通过修改leftBarButtonItem和rightBarButtonItem可以修改左右侧的视图。

    Tip:由于左上角往往是导航按钮,因此不要轻易修改左边按钮。

    如果添加多个UIView到导航栏,修改BarButtonItems属性即可,传入一个NSArray,UIView会按照在数组中的顺序从左到右排列。

    一个细节:栈顶下面Title过长时导航栏的返回按钮会很长很难看,应该更换为“<返回”。

    注意,左上角的NavigationItem(导航按钮)是由栈顶下方的控制器(上一个控制器)决定的,应该通过下面的方法控制:

    注意修改的是下一个页码的返回按钮文字。

    vc1.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStyleDone target:nil action:nil];
    Tip:在iOS6中,UIWindow高度为480,导航控制器的View高度为460,栈顶控制器高度只剩下460-44=416的高度

    利用stroyboard导航:

    两种建立方式,第一种是直接新建一个NagivationController,然后再建立相应的View,通过Nagivation拖线过去,选择rootViewController方式来建立联系。

    第二种是选中一个View,然后如下图这样选择:


    跳转可以拖线,选择push方式。

    Tip:千万不要拖往回的线,这样会创建一个新的控制器,返回应该通过pop方法。

    可以不通过代码修改back按钮等内容:



  • 相关阅读:
    ABP 框架第一篇 ABP框架入门
    SpringBoot+mybatis plus 框架搭建
    诺依框架 第一章 springboot+vue前后端分离版本部署
    常用Web Service汇总网页
    Singleton单例模式
    告别无止境的增删改查Java代码生成器
    Builder生成器模式
    细说Java IO相关
    AbstractFactory抽象工厂模式
    设计模式关于模式的一些很基本的知识点
  • 原文地址:https://www.cnblogs.com/aiwz/p/6154217.html
Copyright © 2011-2022 走看看