UINavigationController

原创 2015年11月19日 23:39:40

UINavigationController

创建

创建地在AppDelegate中

RootViewController *rooVC = [[RootViewController alloc] init];
    UINavigationController *navC = [[UINavigationController alloc] initWithRootViewController:rooVC];
// 将导航控制器作为window的视图控制器
// 系统运行时默认显示的是根视图控制器的视图
    self.window.rootViewController = navC;
    [rooVC release];
    [navC release];

主要属性

导航控制器的属性通过 当前显示的控制器的self.navigationController 进行设置
1.topViewController(readonly)
取出栈顶的视图控制器

2.viewControllers
以数组形式取出栈中所有视图控制器

3.navigationBar(readonly)
取出导航控制器的导航条

主要方法

1.下一页(指定控制器入栈)

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

2.返回上一视图(当前控制器出栈 显示栈中下一个控制器视图)

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

3.返回指定视图(该视图后的所有视图控制器出栈)

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

4.返回首页(除了首页 其他控制器均出栈)

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

UINavigationBar

设置导航条上填充色 背景图片 透明度

一个UINavigationBar 管理一组 UINavigationItem

// 状态栏高20
// 导航条高44
// 导航条的高就是44 状态栏的背景 是导航条延伸过去的

// 设置导航条的颜色
    self.navigationController.navigationBar.barTintColor = [UIColor greenColor];

// 设置背景图片
// 横屏状态下 导航条高32

// 1. 图片高度小于44       效果:平铺
// 2. 图片高度等于44       效果:只覆盖导航条
// 3. 图片高度在44和64之间  效果:平铺
// 4. 图片高度等于64       效果:覆盖导航条和状态栏
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"32064"] forBarMetrics:UIBarMetricsDefault];

// 7.0后 导航条默认是半透明的
// 起始点从屏幕左上角 开始计算
// 关闭半透明后 起始点从导航条下面 开始计算
// 一般使用默认的半透明状态 不用考虑起始点
    self.navigationController.navigationBar.translucent = NO;

UIBarButtonItem

初始化导航条上的button 并将值传给UINavigationItem (和image 贴到 imageView.image上一个性质)

// 设置左按钮
    UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"left"] style:UIBarButtonItemStylePlain target:self action:@selector(barButtonClick:)];
    self.navigationItem.leftBarButtonItem = barButtonItem;
// 释放
    [barButtonItem release];
    UIBarButtonItem *barButtonItem1 =  [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action:@selector(barButtonClick:)];
    self.navigationItem.leftBarButtonItem = barButtonItem1;
    [barButtonItem1 release];

// 设置右按钮
    UIBarButtonItem *barButtonItem2 = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"right"] style:UIBarButtonItemStylePlain target:self action:@selector(barButtonItem1Click:)];
    self.navigationItem.rightBarButtonItem = barButtonItem2;
    [barButtonItem2 release];

UINavigationItem

设置导航栏标题和按钮

// 设置页面导航栏 标题
    self.navigationItem.title = @"首页";
// 在标题位置 设置一个视图
    UIView *titleView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 150, 44)];
    titleView.backgroundColor = [UIColor blueColor];
    self.navigationItem.titleView = titleView;
    [titleView release];

两个试图控制器之间的传值

从前往后传

假设在首页有一个button 其作用是让navigationController push另外一个试图控制器

再创建一个textField 现欲将textField上输入的值传到另一个试图控制器的textField中

// button的创建
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(100, 100, 100, 100);
    button.backgroundColor = [UIColor brownColor];
    [button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
// textField的创建    
UITextField *textFiled = [[UITextField alloc] initWithFrame:CGRectMake(100, 100, 100, 50)];
    textFiled.borderStyle = UITextBorderStyleRoundedRect;
    [self.view addSubview:textFiled];

buttonClick方法的实现:

- (void)buttonClick:(UIButton *)button
{
    SecondViewController *secondVC = [[SecondViewController alloc] init];
    // 最好将两个控制器的视图上textFiled 各自都设置成属性(在.h中声明 可在本类以外使用) 以方便使用
    // 这里有个注意点: 下式写法是错误的 必须用一个字符串来接收text 然后再将字符串赋值给 secondVC.textField.text
    secondVC.textField.text = self.textField.text;// 错误
    secondVC.textFieldText = self.textField.text;
    [self.navigationController pushViewController:secondVC animated:YES];
    [secondVC release];
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

UINavigationController导航栏的隐藏和显示

- (void)viewWillAppear:(BOOL)animated { [super.navigationController setNavigationBarHidden:YES a...
  • LG_CodeMachine
  • LG_CodeMachine
  • 2016年06月04日 20:02
  • 1357

UINavigationController的使用心得(一)

同理与UITabBarController,一些普遍性的操作就不提到了,大家可以参考下(http://blog.csdn.net/totogo2010/article/details/7681879)...
  • nogodoss
  • nogodoss
  • 2014年03月20日 16:36
  • 13744

使用UINavigationController后导致UIScollView尺寸变化

//   转载自,网址: the original address       在 iOS 7 中,如果某个 UIViewController 的 self.view 第一个子视图是 UIS...
  • b719426297
  • b719426297
  • 2014年03月27日 15:08
  • 7854

UINavigationController和Storyboard的应用

1.新建项目 2.删除项目自带的ViewController和Main.storyboard,并且在target里面General的Main Interface删除Main 3.新建M...
  • NarutoHainata
  • NarutoHainata
  • 2016年06月08日 23:05
  • 1287

UINavigationController 上方导航下横线阴影 去留问题 以及 特殊格式处理

UINavigationController 上方导航下横线阴影 去留问题 以及 特殊格式处理
  • yiral
  • yiral
  • 2016年12月13日 13:32
  • 450

uinavigationcontroller 中的viewcontrollers 跳到指定的controller一个栈顶指针的变化

1:栈:先进先出原则。 2:如果是回到上一个控制器,直接self.nav popviewerconvc 即可。 3:如果是回到指定的控制器,需要遍历控制器数组。 for(UIViewControlle...
  • cos_sin_tan
  • cos_sin_tan
  • 2016年01月25日 14:00
  • 1482

IOS 一个继承UINavigationController的子类

IOS UINavigationController
  • u011154007
  • u011154007
  • 2016年10月29日 21:05
  • 540

iPhone开发-ios7环境下如何禁用UINavigationController中的轻扫回退的手势

在ios7中,苹果公司给navigation增加了一个的默认属性,你手指从屏幕的左边框向右轻扫,将会回退到导航栈的前一个视图控制页面(controller),但是在我的app中和我设置的默认手势冲突了...
  • zcl369369
  • zcl369369
  • 2014年03月27日 22:18
  • 7265

UINavigationController下view及子view的坐标及高度

开始搞IOS了,希望能在这条路上坚持下去。 捋了捋navigationBar,根视图,子视图之间frame的位置关系,见图:...
  • defineYouMyHeart
  • defineYouMyHeart
  • 2016年04月27日 17:41
  • 425

IOS代码创建uinavigationcontroller

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc...
  • liuyinghui523
  • liuyinghui523
  • 2016年07月21日 13:49
  • 503
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UINavigationController
举报原因:
原因补充:

(最多只允许输入30个字)