zoukankan      html  css  js  c++  java
  • 导航控制器的知识总结

    1.导航控制器的功能和介绍

    【注】导航控制器,是UIKit框架提供的一个容器视图控制器,用于切换拥有明确层次关系的视图。即由一级视图切换到二级视图,而不是平级视图间的切换。

    【注】导航中视图控制器的层次结构,称为栈结构。

    2.如何使用导航控制器实现界面之间的跳转

    <1>显示一个界面,显示导航条

    //使用导航控制器

    //1.创建导航控制器,rvc放到导航控制器中

    //2.导航控制器作为window根视图控制器

    //导航条大小: 320X44

    RootViewController *rvc = [[RootViewController alloc] init];

    UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:rvc];

    self.window.rootViewController = nc;

    <2>使用导航控制器切换到另外一个界面

    SecondViewController *svc = [[SecondViewController alloc] init];

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

    <3>如何使用代码切换到上一个界面

    //实现切换到上一个界面

    [self.navigationController popViewControllerAnimated:YES];

    <4>如何从任意视图控制器切换到根视图控制器

    非常常用: 程序任意界面返回到登陆界面,返回应用主界面

    //返回导航控制器中根视图控制器

    [self.navigationController popToRootViewControllerAnimated:YES];

    <5>如何导航控制器切换到任意的视图控制器

    //如何利用导航控制器切换到第二个界面

    //viewControllers存储者导航控制器中所有的视图控制器

    NSArray *viewControllers = self.navigationController.viewControllers;

    [self.navigationController popToViewController:[viewControllers objectAtIndex:1] animated:YES];

    3.导航条上控件的设置

    <1>设置标题(文字)

    self.title = @"主界面";

    //导航控制器的控件集合

    self.navigationItem.title = @"main";

    //细节1: 修改的都是标题,最后一个是有效的

    <2>设置图片标题

    //标题位置显示logo图片

    //细节1: titleView优先级高,覆盖文本标题

    //细节2: titleView是UIView,意味设置任意控件

    //细节3: x和y忽略

    //细节4: 图片显示不出来(1)名字 (2)必须设置大小

    UIImageView *logoView = [[UIImageView alloc] init];

    logoView.frame = CGRectMake(0, 0, 60, 35);

    logoView.image = [UIImage imageNamed:@"logo_title.png"];

    self.navigationItem.titleView = logoView;

    [logoView release];

    <3>左侧添加文本按钮

    //<1>创建文本按钮

    UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithTitle:@"点我" style:UIBarButtonItemStyleDone target:self action:@selector(navButtonClick:)];

    self.navigationItem.leftBarButtonItem = leftItem;

    <4>左侧添加系统样式的按钮

    //<2>.创建系统样式的按钮

    UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(navButtonClick:)];

    self.navigationItem.leftBarButtonItem = leftItem;

    <5>左侧添加自定义的按钮

    //细节: 图片没有显示的问题,没有设置大小

    UIButton *leftButton = [UIButton buttonWithType:UIButtonTypeCustom];

    leftButton.frame = CGRectMake(0, 0, 33, 30);

    [leftButton setBackgroundImage:[UIImage imageNamed:@"main_left_nav.png"] forState:UIControlStateNormal];

    [leftButton addTarget:self action:@selector(navCustomButtonClick:) forControlEvents:UIControlEventTouchUpInside];

    UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithCustomView:leftButton];

    self.navigationItem.leftBarButtonItem = leftItem;

    <6>下个界面的左侧添加返回的按钮

    //写在mainViewController

    //细节1: 显示在下个界面上

    //细节2: 忽略自定义ButtonItem的事件响应方法

    UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@"返回主界面" style:UIBarButtonItemStyleDone target:self action:@selector(backButtonClick:)];

    self.navigationItem.backBarButtonItem = backItem;

    [backItem release];

    4.导航条的设置(风格,背景图片,颜色)

    <1>设置导航条的风格

    //<1>设置风格(默认和黑色)

    //<2> 不同的版本上会有不同: 两个枚举值放弃使用了

    //细节: 设置透明后视图会上移

    [self.navigationController.navigationBar setBarStyle:UIBarStyleBlack];

    [self.navigationController.navigationBar setTranslucent:YES];

    <2>颜色和色调

    //<2>导航条颜色的设置

    //颜色???

    //细节1:混合色

    //细节2: 只有设置为透明后才会出现

    [self.navigationController.navigationBar setBackgroundColor:[UIColor redColor]];

    //设置色调

    [self.navigationController.navigationBar setTintColor:[UIColor redColor]];

    <3>背景图片

    //UIBarMetricsDefault表示横屏

    //UIBarMetricsLandscapePhone竖屏

    //细节: 图片格式适宜为 320X44

    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"header_bg.png"] forBarMetrics:UIBarMetricsDefault];

    <4>隐藏导航条

    //隐藏导航栏

    [self.navigationController setNavigationBarHidden:YES];

    5.工具栏的使用(添加按钮)

    <1>如何显示工具条

    //细节: 导航控制器自带导航条和工具条

    // 工具条默认情况下不会显示

    [self.navigationController setToolbarHidden:NO];

    <2>工具条上添加按钮

    // 其中的对象应该是 UIBarButtonItem

    //细节: 显示的从左边,按钮中没有间隔

    UIBarButtonItem *one = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(toolButtonClick:)];

    UIBarButtonItem *two = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action:@selector(toolButtonClick:)];

    UIBarButtonItem *three = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(toolButtonClick:)];

    //间隔也是UIBarButtonItem

    UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

    self.toolbarItems = [NSArray arrayWithObjects:one,space,two,space,three,nil];

    <3>指定按钮的位置

    UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];

    space.width = 60;

    6.导航控制器的界面传值 (单例传值)

    <1>正向传值

    ImageCategoryViewController *icvc = [[ImageCategoryViewController alloc] init];

    icvc.username = @"long ao tian";

    icvc.delegate = self;

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

    <2>反向传值 !!!

    //思路:

    //思考1: 当前视图控制器有没有main指针

    // <1>当前视图控制器加属性 delegate

    // <2>切换到当前界面的是设置 delegate

    //delegate一半都是id类型

    //思考: 能不能给他发送消息

    // 发送后delegate没有方法响应这个消息

    // <1>自己要指定一个协议

    // <2>对方遵守协议,实现协议中方法

    //细节: Image制定协议, 别人遵守

    7.扩展: 好玩界面间的切换效果

    //@"cube" @"moveIn" @"reveal" @"fade"(default) @"pageCurl" @"pageUnCurl" @"suckEffect" @"rippleEffect" @"oglFlip"

    //加上切换效果, 扩展内容

    // QuartzCore 实现动画

    //1.包含头文件

    //2.导入库二进制文件Library

    //<1>创建对象

    CATransition *animation = [CATransition animation];

    //设置动画类型

    // //@"cube" @"moveIn" @"reveal" @"fade"(default) @"pageCurl" @"pageUnCurl" @"suckEffect" @"rippleEffect" @"oglFlip"

    animation.type = @"fade";

    //设置动画的方向

    animation.subtype = kCATransitionFromTop;

    //设置动画时间.0.5秒

    animation.duration = 3;

    //设置动画的节奏

    animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];

    //animation加入到导航控制器中

    [self.navigationController.view.layer addAnimation:animation forKey:nil];

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

    8. //设置naviagtionbar的返回按钮颜色

    // self.navigationController.navigationBar.barTintColor = [UIColor blackColor]; self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

    [self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];

  • 相关阅读:
    AWR报告生成
    ios-html-get/post差额,简而言之(MS)CheckST
    2015第33周一
    2015第32周日
    2015第32周六
    2015第32周五
    2015第32周四
    2015第32周三
    2015第32周二
    2015第32周一
  • 原文地址:https://www.cnblogs.com/W-Kr/p/5095278.html
Copyright © 2011-2022 走看看