UINavigationControl

来源:互联网 发布:淘宝视觉营销 编辑:程序博客网 时间:2024/06/06 10:47

1.navigationBar导航条,可以用setBackgroundImage方法设置背景图片,当然图片多了可以使用clipsToBounds剪裁. 这点和UIView一样。

2.但,navigationBar是否隐藏和显示这个需要它爸也就是self.navigationController来控制,有直接.navigationBarHidden设置为YES/NO,也可以用方法setNavigationBarHidden,都能实现效果。

3.另一个重要的知识是对navigationItem的设置,这个属性和navigationController是平级的,所以直接可以用self.navigationItem使用。当然可用的有设置导航条标题的方法setTitle,当然你也可以直接把文字换成一个视图,即所谓的标题视图放在导航条的中间,用得方法是setTitleView

4.最重要的可能是给navigationItem设置左右两边的按钮,一般默认的在左边有“返回”,在右边的有“摄像头”(如微信朋友圈)。步骤就是创建一个UIBarButtonItem对象,然后直接把这个对象赋值给self.navigationItem.leftBarButtonItem或者右边的。当然也可以一次创建很多个UIBarButtonItem组成一个数组,然后把这个数组赋值给self.navigationItem.leftBarButtonItems,注意后面这个和前面这个相比,多了一个“s”,有很多个。也要注意一下有多个按钮时的排列顺序。显示顺序,左边:按数组顺序从左向右;右边:按数组顺序从右向左


5.自定义UIBarButtonItem   UIBarButtonItem *barBtn4=[[UIBarButtonItem alloc]initWithCustomView:view4];

6.我们也可以在子页中自定义一个返回按钮覆盖原先的"<back"

UIBarButtonItem *barBtn5=[[UIBarButtonItem alloc]initWithTitle:@"回家" style:UIBarButtonItemStylePlain target:self action:@selector(backTo)];  

    self.navigationItem.leftBarButtonItem=barBtn5
7. 每一个UIViewController对象里面都有一个指向导航控制器的指针,用以方便的获取它的导航控制器
    我们可以猜想,导航控制器对子视图控制器是强引用,而子视图控制器又有一个指针指向导航控制器,这个指针虽然指向了导航控制器,但它是弱引用

8.[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"header_bg64.png"] forBarMetrics:UIBarMetricsDefault];
    //图片太大会把状态栏充满。

9. 设置横屏下在导航条背景图片
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"header_bg64"] forBarMetrics:UIBarMetricsCompact];
    // navBg-32.png
    给导航条增加背景图片,其中forBarMetrics有点类似于按钮的for state状态,即什么状态下显示
    UIBarMetricsDefault-竖屏横屏都有,横屏导航条变宽,则自动repeat图片
    UIBarMetricsCompact-竖屏没有,横屏有,相当于之前老iOS版本里地UIBarMetricsLandscapePhone
    UIBarMetricsCompactPrompt和UIBarMetricsDefaultPrompt暂时不知道用处,官方解释是Applicable only in bars with the prompt property, such as UINavigationBar and UISearchBar,以后遇到时再细说

10.  self.navigationController.navigationBar.backgroundColor = [UIColor purpleColor];   // 可以用,但是效果不好,受是否透明和self.view.backgroundColor的影响。
   
    if (kIOS7) {
        self.navigationController.navigationBar.barTintColor = [UIColor purpleColor];
        //不受是否半透明和self.view.backgroundColor的影响。
    } else {
        self.navigationController.navigationBar.tintColor = [UIColor purpleColor];
        //和navigationBar.backgroundColor一样易受影响
    }
    
    设置是否透明
    self.navigationController.navigationBar.translucent = NO;
    
    设置barStyle
    注意,barStyle会影响到状态栏的显示
    self.navigationController.navigationBar.barStyle = UIBarStyleBlack;

11. title属性
    如果没有自定制返回按钮,下一个视图控制器的返回标题就是本控制的title
    如果title过分长,那下一个控制器的返回标题还是back

    跳转后实现下一界面SecondViewControl的title改变  必须在跳转之前改变self.title

    self.title = @"Root"; (self是viewControl)

12. 返回按钮需要注意的地方:

       A —— push -—> B

       .1 如果B视图控制器有一个自定义的左侧按钮(leftBarButtonItem),则会显示这个自定义按钮, 要自己实现返回操作;
        .2 如果B没有自定义按钮,但是A视图的backBarButtonItem属性有自定义项,则显示这个自定义项

        .3  如果前2条都没有,则默认显示一个后退按钮,后退按钮的标题是A视图的标题(注意当文字过长的时候,下一页的返回按钮就不会是当前的back,则会默认显示back), 如果没有标题,则默认有一个back

          如果即想要系统的返回箭头,又想只改变其标题怎么办?
A -> PUSH -> B
解决办法1. 可以把一张图放到button上,然后设置leftBarButtonItem, 一般都是这么处理的
解决办法2(歪门斜道). 设置上一个视图控制器(A)的backBarButtonItem
B *b = [B alloc];
UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@"回去!" style:UIBarButtonItemStylePlain target:nil action:nil];
[self.navigationItem setBackBarButtonItem:backItem];
[backItem release];
[self.navigationController pushViewController:b animated:YES];

          如果不用系统的返回箭头,用自己的图片当作返回箭头 怎么办?

不能不能用 UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithImage:[UIImage   imageNamed:@"back.png"]    style:UIBarButtonItemStylePlain target:nil action:nil]; 这个没有用处

    应该用:

    [[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@"back.png"]];
    [[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"back.png"]];

    而且图片的颜色是由tintColor属性控制的.

 13.设置Navigation Bar颜、Item颜色、title颜色

if (IS_IOS_7_Later) {
        [[UINavigationBar appearance] setBarTintColor:[UIColor whiteColor]]; //iOS后才出现
        [[UINavigationBar appearance] setTintColor:[UIColor blackColor]];
    } else {
        [[UINavigationBar appearance] setTintColor:[UIColor blackColor]];
    }
    
    
    [[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
                                                           [UIColor blackColor], NSForegroundColorAttributeName, TextFontWithSize(17), NSFontAttributeName, nil]];
    



0 0
原创粉丝点击