一、使用UINavigationController的步骤以及代码

 // 程序加载完成后执行的代码
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 1.初始化窗体
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // 2.导航控制器的根控制器
UIViewController *vc = [[ViewController alloc] init];
vc.view.backgroundColor = [UIColor lightGrayColor];
// 3.窗体的根控制器为导航控制器
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc]; // 4.设置窗体根控制器
self.window.rootViewController = nav; // 5.显示窗体
[self.window makeKeyAndVisible];
return YES;
}
二、UINavigationController的子控制器
  <1>UINavigationController以栈的形式保存子控制器(先进后出,看成数组就成)

  @property(nonatomic,copy) NSArray *viewControllers;

  @property(nonatomic,readonly) NSArray *childViewControllers;

  <2>使用push方法能将某个控制器压入栈

  - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;

  <3>使用pop方法可以移除控制器

  将栈顶的控制器移除

  - (UIViewController *)popViewControllerAnimated:(BOOL)animated;

  <4>回到指定的子控制器

  - (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;

  <5>回到根控制器(栈底控制器)

  - (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;

三、如何修改导航栏的内容

  <注意!!!!>导航栏的内容由栈顶控制器的navigationItem属性决定
  UINavigationItem有以下属性影响着导航栏的内容
  <1>左上角的返回按钮

  @property(nonatomic,retain) UIBarButtonItem *backBarButtonItem;

  <2>中间的标题视图

  @property(nonatomic,retain) UIView *titleView;

  <3>中间的标题文字

  @property(nonatomic,copy)NSString *title;

  <4>左上角的视图

  @property(nonatomic,retain) UIBarButtonItem *leftBarButtonItem;

  <5>UIBarButtonItem *rightBarButtonItem  右上角的视图

  @property(nonatomic,retain) UIBarButtonItem *rightBarButtonItem;

  <6>代码实现:

 - (void)viewDidLoad {
[super viewDidLoad];
// 这段代码是错误的!--导航栏的内容由栈顶控制器的navigationItem属性决定,并不是有导航栏本身决定!
// self.navigationController.navigationItem.title = @"第一个导航";
self.navigationItem.title = @"第一个导航";
// 下面这一句跟上面的代码是同一个意思,简化写法
// self.title = @"这个管那里????";
// 可以设置UIView
self.navigationItem.titleView = [UIButton buttonWithType:UIButtonTypeContactAdd];
// 左右两边的按钮系统默认渲染成蓝色的,并且位置改动不了
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"没用" style:UIBarButtonItemStyleDone target:nil action:nil];
// 右边按钮不受系统渲染的方法一:initWithCustomView
UIButton *btn = [[UIButton alloc] init];
[btn setImage:[UIImage imageNamed:@"navigationbar_friendsearch"] forState:UIControlStateNormal];
[btn setImage:[UIImage imageNamed:@"navigationbar_friendsearch_highlighted"] forState:UIControlStateHighlighted];
[btn sizeToFit]; self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:btn];
}

iOS边练边学--UINavigationController导航条的使用的更多相关文章

  1. UINavigationController导航条是否挡住下面的内容

    控制 UINavigationController 导航条是否挡住下面的内容 if ([[[UIDevice currentDevice] systemVersion] floatValue] > ...

  2. Bootstrap每天必学之导航条

    http://www.jb51.net/article/75534.htm Bootstrap每天必学之导航条,本文向大家讲解了多种多样的导航条,以及导航条中元素的实现方法,感兴趣的小伙伴们可以参考一 ...

  3. iOS边练边学--父子控件之作为导航控制器的子类产生的问题以及网易新闻练习

    一.导航控制器的子类 作为导航控制器的子类,并且是导航控制器子类中的第一个,系统会默认给子控件添加EdgeInsert属性,把导航栏的宽度挤出来.但是系统只会默认修改第一个. 解决办法1:系统帮忙给第 ...

  4. IOS第12天(2,UINavigationController导航控制器)

    ****HMAppDelegate.m @implementation HMAppDelegate - (BOOL)application:(UIApplication *)application d ...

  5. iOS边练边学--Http网络再学习,简单介绍

    一.URL 什么是URL URL中常见的协议 二.Http Http的基本通信过程 发送Http请求的方法 GET 和 POST 对比 GET 和 POST 的选择 三.iOS中的Http学习 iOS ...

  6. iOS边练边学--多线程NSOperation介绍,子类实现多线程的介绍(任务和队列),队列的取消、暂停(挂起)和恢复,操作依赖与线程间的通信

    一.NSOperation NSOperation和NSOperationQueue实现多线程的具体步骤 先将需要执行的操作封装到一个NSOperation对象中 然后将NSOperation对象添加 ...

  7. iOS边练边学--多线程介绍、NSThread的简单实用、线程安全以及线程之间的通信

    一.iOS中的多线程 多线程的原理(之前多线程这块没好好学,之前对多线程的理解也是错误的,这里更正,好好学习这块) iOS中多线程的实现方案有以下几种 二.NSThread线程类的简单实用(直接上代码 ...

  8. iOS边练边学--CALayer,非根层隐式动画,钟表练习

    一.CALayer UIView之所以能显示在屏幕上,完全是因为他内部的一个图层 在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性 ...

  9. iOS边练边学--UIGestureRecognizer手势识别器简单介绍

    iOS 3.2之后,苹果退出了手势识别功能(Gesture Recognizer),在触摸事件处理方面,大大简化了开发者的开发难度. 一.UIGestureRecognizer UIGestureRe ...

随机推荐

  1. js unique

    <script type="text/javascript"> var dataArr = [1,3,33,3,5,1,4,3,4,5]; document.write ...

  2. 利用腾讯云免费证书打造全https站

    什么是https? 超文本传输安全协议(Hypertext Transfer Protocol Secure,缩写为HTTPS)是一种网络安全传输协议http是HTTP协议运行在TCP之上,所有传输的 ...

  3. 基于SpringCloud的微服务实践

    微服务不同于单一架构应用, 是典型的分布式场景, 各服务之间通过IPC进行通信. 实现微服务的过程中, 我们需要解决以下问题: 服务注册和服务发现. 根据应用选择合适的通信协议和数据协议. 例如可以选 ...

  4. C# 默认参数/可选参数需要注意

    在使用C#的默认参数/可选参数的时候,需要注意,参数的默认值是在编译的时候,自动加入调用方的. 如我有这样一个方法: public class Name { public void Test(Bool ...

  5. Python学习笔记015——readline与readlines的区别

    示例1 读取同样一个文件binary_read_1.txt. 春眠不觉晓,处处闻啼鸟. 夜来风雨声,花落知多少. 其中该文件内容被下段代码读出(注意,这里是采用的readlines) f = open ...

  6. [转载]Class-AB Amplifier 笔记

    Class-AB Amplifier 笔记 Reading Notes from Mikko Loikkanen “Design and Compensation of High Performanc ...

  7. python标准库介绍——23 UserString 模块详解

    ==UserString 模块== (2.0 新增) ``UserString`` 模块包含两个类, //UserString// 和 //MutableString// . 前者是对标准字符串类型的 ...

  8. Java web中WEB-INF目录理解

    WEB-INF是Java的WEB应用的安全目录.所谓安全就是客户端无法访问,只有服务端可以访问的目录.如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问. ...

  9. 跟我一起学习VIM - vim插件合集

    2016-06-14 15:04 13333人阅读 评论(0) 收藏 举报 分类: Linux(104)  目录(?)[+]  前两天同事让我在小组内部分享一下VIM,于是我花了一点时间写了个简短的教 ...

  10. JMeter学习笔记(六)-负载与监听

    1. 场景设计 场景设计的原则:忠于用户实际操作,组合用户的各种操作到场景中来. JMeter场景主要通过线程组设置来完成的,对于复杂场景还需要与逻辑控制器配合完成. 2.场景设置 JMeter线程组 ...