UINavgationController&UIBarButtonItem&UINavgationBar

(一)有时候一个View里面有多个view,这个大的View来管理多个小的view。那么控制器也是这样的,用一个控制器去管理多个控制器。为了便于控制器管理,iOS提供了两个比较特殊的控制器,UINavgationController和UITabBarController。一般来说一个页面就是一个控制器。

(1)导航条的高度是44,最上面20个点是状态栏。加起来是64。然后用于管理多个控制器,直接push控制器就行了。Navgation也是栈的数据结构。每次push是压栈,看到的都是最后创建的那个。通过nav.viewcontrollers属性就能拿到当前所有的控制器。

    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.window.backgroundColor = [UIColor clearColor];

    UINavigationController *nav = [[UINavigationController alloc] init];

    UIViewController *con1 = [[UIViewController alloc] init];
    con1.view.backgroundColor = [UIColor yellowColor];

    UIViewController *con2 = [[UIViewController alloc] init];
    con2.view.backgroundColor = [UIColor orangeColor];

    [nav pushViewController:con1 animated:NO];
    [nav pushViewController:con2 animated:NO];

    // 如果上面动画是NO就是俩,YES就是1,但是数组其实是两个。
    NSLog(@"%@",nav.viewControllers);
   NSLog(@"%@",nav.childViewControllers);    self.window.rootViewController = nav;    [self.window makeKeyAndVisible];

  nav.viewControllers是copy的,nav.childViewControllers是只读的。

  (2)在一个Navgation控制器中,特征表示就是上面有标题。整体是一个NavgationController,上面隔开20状态栏后,44个点是NavgationBar,NavgationBar上面是NavgationItem。如果想要设置一个控制器的“返回”按钮或者类型,那就要在前一个控制器实现。

    // 如果想要设置一个控制器的返回按钮类型,必须去前一个控制器设置
    // 设置一个控制器的标题用title,这些都是在navgationItem中实现的
    self.navigationItem.title = @"我是第一个控制器";
    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"自定义返回" style:(UIBarButtonItemStylePlain) target:nil action:nil];

  (3)导航栏的内容修改由栈顶控制器的navgationItem来决定的。

  3.1左上角返回 :UIBarButtonItem :backItem用上一个控制器来控制

  3.2中间标题 : titleView

  3.3中间标题文字 : title

  3.4左右按钮 : lefr/rightBarButtonItem

  所以说,如果要控制颜色,那么bar。如果控制内容,那么item,而控制器就只是控制器。

  特例:修改中间title的时候,可以用bar来修改,代码如下:

  // 设置中间标题名字,然后设置Bar的字体字典
    self.navigationItem.title = @"我只是第三个控制器";
    NSDictionary *dict = @{NSFontAttributeName : [UIFont systemFontOfSize:10],NSForegroundColorAttributeName : [UIColor redColor]};

    [self.navigationController.navigationBar setTitleTextAttributes:dict];

  (4)bar设置一些颜色特效等

  4.1高斯模糊:设置bar的背景颜色后,是渐变的。设置tintColor后,整体默认的渲染蓝色会进行更改。

    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"高斯模糊" style:UIBarButtonItemStylePlain target:nil action:nil];
    self.navigationController.navigationBar.backgroundColor = [UIColor orangeColor];
    self.navigationController.navigationBar.tintColor = [UIColor yellowColor];
    

  4.2不渐变,修改整个背景色----》但是这并不是一个纯正的颜色,比一般默认的颜色要深。因为被渲染了,此时要设置一个属性。

 self.navigationController.navigationBar.barTintColor = [UIColor greenColor];
self.navigationController.navigationBar.translucent = false;

  4.3按钮放置图片时候,也是会被渲染的,想要不渲染要默认设置这个图片不渲染: image imageWithRander....一个方法。

(二)总结

// 设置标题
self.navigationItem.title
self.title

// 设置左右按钮
self.navigationItem.leftBarButtonItem
self.navigationItem.leftBarButtonItems
self.navigationItem.rightBarButtonItem
self.navigationItem.rightBarButtonItems

// 设置标题为自定义view
self.navigationItem.titleView

// nav bar 颜色
[self.navigationController.navigationBar setBackgroundColor:[UIColor redColor]]; // 仅仅是导航条的颜色
[self.navigationController.navigationBar setTintColor:[UIColor redColor]]; // 主题(按钮)颜色
[self.navigationController.navigationBar setBarTintColor:[UIColor redColor]]; // 导航条+状态栏颜色

// 设置bar不透明
self.navigationController.navigationBar.translucent = NO;

// 设置自定义标题
// title
NSDictionary* attr = @{ NSFontAttributeName : [UIFont systemFontOfSize:10],NSForegroundColorAttributeName : [UIColor redColor] };
[self.navigationController.navigationBar setTitleTextAttributes:attr];
// titleView
UILabel* titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 44)];
titleLabel.font = [UIFont boldSystemFontOfSize:20];
titleLabel.textColor =[UIColor orangeColor];
titleLabel.textAlignment = NSTextAlignmentCenter;
titleLabel.text = @"自定义标题";
self.navigationItem.titleView = titleLabel;

// 导航条设置自定义图片为按钮(原始图 不渲染)
UIImage* image = [UIImage imageNamed:@"navigationbar_friendsearch_highlighted"];
image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

// nav bar
// nav controller
// nav item
// 不解释,自己捋...

注意:SB做控制器连线跳转。push都是创建一个。所以往回连也是新创建,那么上面的返回按钮就要执行多次才能返回到最底层的跟控制器。此时就只能创建控制器绑定你要返回的控制器纯代码写了。

时间: 2024-12-14 06:52:43

UINavgationController&UIBarButtonItem&UINavgationBar的相关文章

ios基础篇(十)——UINavgationController的使用(一)UIBarButtonItem的添加

UINavigationController又被成为导航控制器,继承自UIViewController,以栈的方式管理所控制的视图控制器,下面就详细说一下UINavigationController的使用: 1.首先新建一个工程(就不多说了)创建RootViewController(继承自UIViewController). 2.打开AppDelegate.h文件添加属性 3.打开AppDelegate.m文件的 - (BOOL)application:(UIApplication *)appl

关于如何使自定义的Button和系统的UIBarButtonItem保持一致的两种方法

在使用过程中,总是会遇到需要自定义UINavgationBar或者是UIToolBar的UIBarButtonItem,但通常我们所得到的结果是自定义之后的button的title和系统的有所区别:下面是两种降低这种区别的方法: <一> 使用自定义Button,将系统的字体颜色抽取出来,使用Button进行设置,下面所抽取出来的颜色比例与系统的基本一样: UIBarButtonItem *spaceButton = [[UIBarButtonItem alloc]initWithBarButt

iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem

转自:http://blog.csdn.net/totogo2010/article/details/7681879 1.UINavigationController导航控制器如何使用 UINavigationController可以翻译为导航控制器,在iOS里经常用到. 我们看看它的如何使用: 下面的图显示了导航控制器的流程.最左侧是根视图,当用户点击其中的General项时 ,General视图会滑入屏幕:当用户继续点击Auto-Lock项时,Auto-Lock视图将滑入屏幕.相应地,在对象

UINavigationController和UIBarButtonItem的例子

#import "AppDelegate.h" #import "FirstViewController.h" #import "SecondViewController.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOption

IOS7 自定义UIBarButtonItem 的一些问题

ios 下自定义导航栏的BarButtonItem 会产生一些偏移问题, 解决方案: 通过新建一个系统的带固定距离的Item来调节你的Item #define   IOS7_NAVI_SPACE   -10 }     [self.navigationItem setLeftBarButtonItems:[self getBackBarButtonitem]]; } //返回按钮 -(NSArray *)getBackBarButtonitem{     //自定义button     UIBu

ios7 UIBarButtonItem 默认蓝色

[self.navigationItem setLeftBarButtonItem:leftButton]; 这样设置在ios7上按钮默认是蓝色 解决方法: leftButton.tintColor = [UIColor whiteColor]; ios7 UIBarButtonItem 默认蓝色,布布扣,bubuko.com

iOS 开发 中级:UIToolbar,UINavigationBar,UITabBar,UIBarButtonItem,UITabBarItem自定义方法总结

原文:  http://blog.csdn.net/songrotek/article/details/8692866?utm_source=tuicool 对于UIToolbar,UINavigationBar,UITabBar,UIBarButtonItem,UITabBarItem这几种控件的自定义,因为具备共同性,因此放在一起讨论. 通常有两种方式来实现自定义. 1)获取控件的对象,然后对这个特定的对象进行特定的修改. 2)利用UIAppearance来实现对所有同类控件及特定同类的自定

UIBarButtonItem全局和局部修改

有时侯你并不想把导航条左侧按钮外观字体或背景全部用以下代码来更改 [plain] UIBarButtonItem *rightItem = [YBarButtonItem barButtonWithStyle:YBarButtonStyleRoundedRectangle Title:@"Save" Action:@selector(saveButtonClicked) Delegate:self]; self.navigationItem.leftBarButtonItem = ri

02---按钮的设置 控制器拥有导航栏包装一层导航控制器 添加子控制器 UIBarButtonItem导航按钮 设置导航栏UINavigationBar主题 设置状态栏样式

一.按钮的设置 1.设置背景图片 [btn setBackgroundImage:image forState:UIControlStateNormal]; 2.内部UIImageView 1> 设置内部UIImageView的图片 [btn setImage:image forState:UIControlStateNormal]; // 不能写成btn.imageView.image = image; 2> 调整内部图片的内容模式 self.imageView.contentMode =