• 【转】 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 区别?

  • 相关阅读:
    Falsy Bouncer(算法)
    Check for Palindromes(算法)
    ecshop 修改模板可输出php代码
    ecshop显示所有分类树栏目
    ecshop首页调用评论及图片
    ECSHOP 商品评论条件修改——购买过该商品且只能评价一次(购买多少次能评价多少次)
    PS4破解
    Spring BeanFactory与FactoryBean的区别及其各自的详细介绍于用法
    Java中类方法与实例方法的区别
    Java中类及方法的加载顺序
  • 原文地址:https://www.cnblogs.com/A--G/p/4675621.html
Copyright © 2020-2023  润新知