一、使用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. 移动端混合开发----ionic

    目前移动端分为三大主流:纯原生.混合开发.web App,随着手机硬件的升级,公司们似乎偏好于web页面开发,而混合开发相对纯web App似乎更受大公司青睐,所谓混合开发俾人理解为,原生代码(iOS ...

  2. 【js】replace()

    replace方法的语法是: stringObj.replace(rgExp, replaceText) 其中stringObj是字符串(string),reExp可以是正则表达式对象(RegExp) ...

  3. python学习笔记——multiprocessing 多进程中的重构方法__init__

    重构: import multiprocessing import time class ClockProcesses(multiprocessing.Process): def __init__(s ...

  4. Android中如何实现文件下载

        最近做一个项目需要从服务器下载图片到本地sdcard,上网查找了一些例子,下面这个比较合适,原文内容如下:   我们在开发中经常需要从服务器下载文件,下载的内容可能有交换的信息,缓存的图片,程 ...

  5. C# 动态获取代码所在行号

    通过System.Diagnostics.StackTrace获取代码所在行号和文件信息 获取行号信息 /// <summary> /// Get line number of code ...

  6. 编码规范:Eclipse Checkstyle配置

    http://chenzhou123520.iteye.com/blog/1627618 http://www.cnblogs.com/lanxuezaipiao/p/3202169.html

  7. ActiveMQ + NodeJS + Stomp 入门

    NodeJS + stomp-client 入门 准备 下载ActiveMQ并安装 执行bin\win32\activemq.bat启动MQ服务 打开http://localhost:8161/adm ...

  8. PHP函数register_shutdown_function的使用示例

    某些情况下,我们需要在程序执行结束时,做一些后续的处理工作,这个时候,php的register_shutdown_function函数就可以帮我们来实现这个功能. 函数简介 当PHP程序执行完成后,自 ...

  9. vim利用插件管理工具-管理配置文件

    目前被广泛应用的2各插件管理工具Pathogen和Vunble,我先说Pathogen Pathogen Pathogen完全用vim脚本编写,不用其他的代码(Vunble就用了python),所以安 ...

  10. openvpn证书吊销

    声明变量source ./vars使用revoke-full命令吊销客户端证书./revoke-full client-name(common name)命令执行后,我们能在keys目录中找到一个文件 ...