zoukankan      html  css  js  c++  java
  • UINavigationController(二)

               在使用UINavigtionController的时候,常常会弄不清哪些属性是UINavigationController的,哪些属性是UIViewController的。并且在更改导航栏和工具栏的样式的时候,常常会于遇到api使用下去没有效果的情况。总之,一直用得比較混乱,今天要好好做一个总结,把那些常常使用的功能都搞清楚。


    一、怎样往导航栏和工具栏加入button

    1、navigationItem属性

            这个属性是UIViewController在UINavigationControllerItem类目下的。

    @property(nonatomic,readonly,retain)UINavigationItem *navigationItem; 

    文档的解释:在必要的时候会创建该属性对象。以便于控制器能够定制它自己的导航栏外观。

    UINavigationItem有下面属性:

    @property(nonatomic,retain)UIBarButtonItem *leftBarButtonItem;//导航栏左边的button,位置与“返回”button同样

    @property(nonatomic,retain)UIBarButtonItem *rightBarButtonItem;//导航栏右边的button

    @property(nonatomic,retain)UIBarButtonItem *backBarButtonItem; //假设前面的那个控制器有title内容,则back button的内容为<title,假设没有title。默认显示<back

    @property(nonatomic,retain)UIView *titleView;//自己定义title的样式

    @property(nonatomic,copy)NSArray *leftBarButtonItems NS_AVAILABLE_IOS(5_0);//使用该属性,能在导航栏左边显示多个button

    @property(nonatomic,copy)NSArray *rightBarButtonItems NS_AVAILABLE_IOS(5_0);//类似leftBarButtonItems属性

    @property(nonatomic,copy)NSString *title;//给它赋值的效果相当于给控制器的title属性赋值一样

    @property(nonatomic,copy)NSString *prompt; //文字内容会显示在title的上面。这个属性会使得导航栏的高度添加30

    @property(nonatomic) BOOL leftItemsSupplementBackButton NS_AVAILABLE_IOS(5_0);//默认值为NO。在leftbutton和backbutton同一时候存在的情况下,仅仅显示leftbutton;假设设为YES,将会显示backbutton和leftbutton,backbutton显示在leftbutton前面

    @property(nonatomic,assign)BOOL hidesBackButton; 



    2、toolbarItems属性

              这个属性是UIViewController在UINavigationControllerContextualToolbarItems类目下的。

    @property (nonatomic,retain)NSArray *toolbarItemsNS_AVAILABLE_IOS(3_0);

    功能:在UIViewController中创建一系列UIBarButtonItem对象。将这些对象加入到toolbarItems数组中,这些UIBarButtonItembutton就会显示在控制器底部的工具栏中。

    代码例如以下:

    UIBarButtonItem *refreshItem = [[UIBarButtonItem alloc]initWithCustomView:refreshButton];
        //每一个控制器有自己的toolbaritems属性,管理工具栏的数组
    [self setToolbarItems:[NSArray arrayWithObjects:refreshItem, nil]];


    二、怎样定制导航栏和工具栏的样式

    1、导航栏的样式:

              navigationBar是UINavigationController的属性

    (1)导航栏左右两边的button
             从ios7開始,tintColor属性仅仅能设置导航栏上button的字体颜色。无法影响到导航栏的背景色。

    (2)导航栏中间的title
            从ios5開始。titleTextAttributes属性能够设置title的字体、颜色、大小等。
         比如:
    [self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor redColor],NSFontAttributeName:[UIFont boldSystemFontOfSize:20]}];

              NSForegroundColorAttributeName是keyword。表示文字的颜色

              NSFontAttributeName表示字体大小和样式。

    //这里的两个keyword是ios7開始才有的,ios7之前有另外的相应keyword

    (3)导航栏的背景
             颜色:从ios7開始。导航栏的背景色由barTintColor来设置,它会把状态栏也变成一样的颜色。
             背景图:从ios5開始。

    - (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics用于设置导航栏背景图片

    (4)导航栏的显示与隐藏

             仅仅有UINavigationController的navigationBarHidden属性才干控制导航栏的显示和隐藏。

    2、工具栏的样式:

             toolbar是UINavigationController的属性

    (1)工具栏的button

             与navigationbar一样的情况。从ios7開始。tintcolor属性设置button的字体颜色

    (2)工具栏的背景色

             bartintcolor设置工具栏的背景颜色

    (3)工具栏的背景图片

    - (void)setBackgroundImage:(UIImage *)backgroundImage forToolbarPosition:(UIBarPosition)topOrBottom barMetrics:(UIBarMetrics)barMetrics

    (4)工具栏的显示和隐藏

             仅仅有UINavigationController的toolbarHidden属性才干控制导航栏的显示和隐藏。

    三、NavigationBar的显示困惑

    1、leftbutton和backbutton

    (1)假设当前控制器设置了leftbutton。优先显示leftbutton

    (2)假设当前控制器没有设置leftbutton,且当前控制器不是导航控制器的根。则显示前面那个控制器的backbutton。假设前面那个控制器没有指定backbutton。则系统会依据前一层的控制器的title属性生成一个backbutton。假设前一层控制器的title为“pre”,则backbutton显示为“<pre”,否则显示为“<back”.

           能够说。当前控制器的backbutton是为后面的那个控制器准备的。

    (3)假设当前控制器没有leftbutton,且当前控制器是导航控制器的根。则导航栏左边没有不论什么显示。

    2、控制器的title和navigationItem的title、titleView

    (1)假设navigationItem的titleview属性有指定,优先显示titileview的样式

    (2)假设titleview没有指定,优先显示navigationItem的title的文字

    (3)假设navigationItem的title没有指定,就以控制器的title属性来显示。


    四、导航控制器的栈

    1、UINavigationController的viewControllers属性NSArray类型,存放当前在导航控制器栈内的全部视图控制器。

    2、topViewController属性指的是导航控制器栈顶的视图控制器。

    3、visibleViewController属性,假设栈顶的控制器还显示了一个模态视图控制器。则指向该模态视图控制器,否则就是栈顶的那个视图控制器。



  • 相关阅读:
    super与this的区别?
    springboot(4)-thymeleaf
    springboot(3)-自定义josn
    springboot(2)-Http协议接口开发
    springboot(1)-HelloWorld
    SpringSecurityOauth2.0
    Docker 应用部署
    RabbitMQ02
    RabbitMQ01
    011通用寄存器
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6755048.html
Copyright © 2011-2022 走看看