UINavigationItem表示UINavigationBar中的控件

邹嘉石
2023-12-01

一般一个程序中有一个UIWindow,一个UINavigationController,一个根UIViewController,多个子UIViewController。

UIWindow是整个可视界面的容器,里面放置我们看到的UIView。
UIView负责处理屏幕上一个矩形区域的绘制,UIView中还可包含子UIView。
UIWindow是UIView类的扩展,可以看作是整个屏幕的根UIView。
UIViewController负责管理UIView的层次结构。可以有多个UIViewController。

一个UIViewController中有一个顶部的UINavigationBar、一个根UIView,多个子UIView。
UINavigationBar中有一个UINavigationItem,UINavigationItem。

UINavigationController是用于构建分层应用程序的主要工具,它维护了一个UIViewController栈。
这个栈中必须有一个根UIViewController,其他的UIViewController都是子UIViewController。

UINavigationItem表示UINavigationBar中的控件,比如左按钮、中间标题、右按钮。
UINavigationController会自动在当前子UIViewController的UINavigationBar左边添加一个返回按钮。
按钮名称是上一个UIViewController的标题。

在UIViewController中有访问view、bar的属性和方法
self.view.backgroundColor = [UIColor whiteColor]; //设置根UIView的颜色
self.navigationItem.title = @"title"; //设置UINavigationBar的标题
[self.navigationController popViewControllerAnimated:YES]; //弹出当前UIViewController



对于UINavigationController,可能都比较熟悉,在上面加title,加 left 和 right 按钮等

但如果不是UINavigationController自带的,而是UINavigationBar,那又该如何添加 title,left,right呢?

UINavigationBar继承于UIView的,它里面没有title属性

查询下API,发现UINavigationBar和UINavigationItem象是一对兄弟,总是形影不离,而且有个方法

- (void)pushNavigationItem:(UINavigationItem *)item animated:(BOOL)animated;

应该就是把UINavigationItem弄到UINavigationBar上,那些title,left,right就在UINavigationItem设置了

UINavigationItem : - (id)initWithTitle:(NSString *)title;  设置title

UINavigationItem : @property(nonatomic,retainUIBarButtonItem *leftBarButtonItem; 在设置left ,right同理


UINavigationItem不是UI,只是一种在UINavigationBar上显示的一些子控件的描述,因此不属于其一部分。


首先准备导航栏背景图片,大小 320x44, @2x文件大小640x88,iOS5以后更改背景图片较简单

  1.     //if iOS 5.0 and later  
  2.     [navBar setBackgroundImage:[UIImage imageNamed:@"navbar1.png"] forBarMetrics:UIBarMetricsDefault];  

titleView如果是UIImageView,且占满NavigationBar的话,就相当加了个背景吧

 类似资料: