zoukankan      html  css  js  c++  java
  • 【转】 UINavigationItem UINavigationBar 关系分析

    原文:http://blog.csdn.net/luoyeffcs/article/details/16106707

    目录

    1.关系分析

    2.关系综述

    3.概念点

    4.疑问


    1.关系分析

    UIBarItem-> UIBarButtonItem -> UINavigationItem

    1.1 UIBarItem:

    UIBarItem类是一个可以放置在Bar之上的所有小控件类的抽象类。继承了该基类所有子类在外观上类似于一个Button,它们都有一个标题,图片,动作以及目标,这点可以从其子类的初始化方法处看到。


    1.2 UIBarButtonItem:

    专门用来放在UIToolbar 或者 UINavigationBar的特殊button.基本行为跟button是一样的。另外从IOS5开始的Customizing Appearance 增加了一系列的方法调整显示。


    1.3 UINavigationItem: NSObject  

    (包含了当前页面导航栏上需要显示的全部信息)

    title,prompt,titleView,leftBarButtonItem,rightBarButtonItem,backBarButonItem


    1.4 UINavigationBar :UIView

    NavigaitonBar就是导航栏,位于屏幕的上方,管理整个NavigationControllernavigationItem,即类似navigationcontroller一样提供了一个栈来管理item


    1.5 UINavigtionController :UIViewController

    包含:viewcontrollersnavigationbartoolbar


    1.6 navigationbarUIView

    包含:items(UINavigationItem)


    1.7 viewController

    包含navigationitemtoolItem.  这两个属性控制了当前页面当前页面的navigationbartoolbar的外观。


    2.关系综述

    navigationcontroller直接控制viewcontrollers,然后包含的navigationbar形成整个nv的导航栏,bar并包含整个navigationItem的栈,管理整个nvnavigationitem NSArray *items 属性)。

    navigationItem包含了bar视图的全部元素(如title,tileview,backBarButtonItem等),受当前viewcontroller管理,即bar形成整个nv的导航视图,然后每个nv页面的导航栏元素由所在页面的navigationItem管理。即设置当前页面的左右barbutton,用 self.navigationItem.leftBarButtonItem等。


    3.概念点

    3.1 

    UINavigationController 是一个viewController

    UINavigationBar 是一个view

    UINavigationItem 是一个NSObject

    UIBarButtonItem 是一个 UIBarItem,是一种专门放在bar上的特殊button

    UIBarItem是一个NSObject,是是各种itme的父类


    3.2 title

    self.navigationItem.title,self.tabBarItem.title,self.title关系:

    由于view controller本身包含navigationItemtabBarItem,所以可以单独对其title赋值,self.title会重写另外两个的值,只是提供的一种便利方法。


    3.3 self.navigationItem,self.navigationController.navigationItem

    self.navigationItem  是定制当前view 导航栏。根据当前的资料看,self.navigationController.navigationItem 是应该被忽视的属性,navigationcontroller继承与view controller,所以会有这个属性,但没有任何作用。

    不过有人说,“They are Different. If you dynamically add UINavigationController, then you use self.navigationController.navigationItem.”但是没有得到验证,这点我也不认可。


    3.4 navigationbar 高度 可更改

    UINavigationBar *bar = [self.navigationController navigationBar];

        CGFloat navBarHeight = 70.0f;

        CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, navBarHeight);

        [bar setFrame:frame];


    3.5 navigationbar prompt

    prompt 是一个NSString类型描述,注意添加该描述以后NavigationBar的高度会增加30,总的高度会变成74(不管当前方向是Portrait还是Landscape,此模式下navgationbar都使用高度44加上prompt30的方式进行显示)

    如:

    self.navigationItem.prompt=@"这是什么?";

    self.title=@"HAH";



    3.6 navigation barinteractivePopGestureRecognizer

    navigation bar 可以修改barstyle transulucent,不能直接修改 frame,bounds,alpha等属性。可以通过initWithNavigationBarClass方法指定自己的navigationbar

    IOS7 多了interactivePopGestureRecognizer,看资料说 ios7 UINavigationController 自动就加入了手势返回 前提是不能自定义leftBarButtonItem,自定义了leftBarButtonItem手势就失效了,待研究。


    4.疑问

    4.1控件都继承于uiview,都有tintcolorbackgroundcolor属性,那两者主要有什么区别呢?

    4.2UIBarPosition UIBarMetrics 区别?

  • 相关阅读:
    leetcode 13. Roman to Integer
    python 判断是否为有效域名
    leetcode 169. Majority Element
    leetcode 733. Flood Fill
    最大信息系数——检测变量之间非线性相关性
    leetcode 453. Minimum Moves to Equal Array Elements
    leetcode 492. Construct the Rectangle
    leetcode 598. Range Addition II
    leetcode 349. Intersection of Two Arrays
    leetcode 171. Excel Sheet Column Number
  • 原文地址:https://www.cnblogs.com/A--G/p/4675621.html
Copyright © 2011-2022 走看看