ios UIBarButtonItem类

UINavigationItem类

    系统会用UINavigationItem类的对象来生成导航栏的内容,该类存放了一些与这种对象有关的信息。UINavigationItem的属性包括导航栏左侧与右侧的UIBarButtonItem、显示在导航栏中的标题、用来显示该标题的视图以及用于从当前视图返回到上一个视图的Back按钮。

    通过这个类,可以把按钮、文本及其他UI对象添加到三个关键位置上,这三个位置分别是导航栏的左侧、中心及右侧。一般情况下,我们会在右侧放置普通的按钮,在中间写上一些文本,并在左侧放置Back按钮。但开发者并不应该局限于这种布局。我们也可以在左、中、右这三个位置上添加自定义的控件。比方说,可以把搜索用的文本框、分段选择控件、工具栏或者图片等放在导航栏中间。而且还可以把许多UIBarButtonItem放在数组里,并添加到导航栏左右两侧。UINavigationItem修改起来是非常容易的。

1、标题与后退按钮

    导航栏中间的标题区是可以定制的。可以像下面这样给navigationItem设置标题:

    self.navigationItem.title = @"My Title"

    上面这行代码与直接设置视图控制器的title属性是等效的。要想定制标题,最简单的办法应该是修改子视图控制器的title属性,而不是去修改navigationItem:

    self.title = @"Hello";

    导航控制器会用这个title属性来构建下一个Back按钮的go back文本。如果当前控制器的标题叫作“Hello”,而开发者又向导航栈里推入了一个新的控制器,那么,新控制器Back按钮上面的文本也会是“Hello”。

    还可以把文本形式的标题改为控件之类的自定义视图。下面这段代码会添加自定义的分段选择控件,不过我们也可以添加图像视图、步进控件等其他东西:

    self.navigationItem.titleView = [[UISegmentedControl alloc] initWithItems:items];

2、宏

    由于创建UIBarButtonItem是一种重复性非常高的任务,所以我们可以用宏来简化它。下面这个宏能够创建基本的按钮项:

    

#define BARBUTTON_TARGET(TITLE,SELECTOR) [[UIBarButtonItem alloc] initWithTitle:TITLE style:UIBarButtonItemStylePlain target:self action:SELECTOR]

    若想调用上面这个宏,只需给出标题和选择子就可以了。由于每次调用宏的时候都只需指定标题和选择子这两条信息,所以这种写法要比直接创建UIBarButtonItem更容易读懂:

    self.navigationItem.rightBarButtonItem = BARBUTTON(@"Push",@selector(pusht:));

    该版本的宏设置目标就是"self",这很符合常见的用法,不过,也可以对此稍加改编。下面这个宏就可以令开发者手工指定目标:

    #define BARBUTTON_TARGET(TITLE,TARGET,SELECTOR) [[UIBarButtonItem alloc] initWithTitle:TITLE style:UIBarButtonItemStylePlain target:TARGET action:SELECTOR]

    UIBarButtonItem的用法会随着应用程序的特定需求而有变化。我们很容易就能创建出一些宏,令其用苹果公司所提供的系统控件来制作UIBarButtonItem,或是令其根据图片资源来制作带有图片的UIBarButtonItem,还有令其创建自定义的视图,并在其中嵌入别的控件以及非UIBarButtonItem式的按钮,然后用这种自定义的视图来制作UIBarButtonItem。


取自iOS核心开发手册

你可能感兴趣的:(iOS)