2013-05-22 168 views
2

只要您不使用操作系统提供的任何UI元素(例如MFMailComposeViewController类),外观代理就很有用。出于这个原因,我需要自定义导航栏中的栏按钮项目,特别是返回按钮自定义特定后退按钮的标题属性

什么问题?当涉及到修改后退按钮的标题属性时,这似乎有问题。已经写了大约customizing the back button,但似乎找不到有关修改后退按钮(而不使用外观代理)的标题属性(文本颜色,阴影颜色等)的信息。

我试过了什么?设置backBarButtonItem属性的标题属性,如下所示。如果我在子视图控制器或父视图控制器中执行此操作,则无关紧要。这适用于leftBarButtonItem和'rightBarButtonItem'项,这让我感到困惑。

[self.navigationItem.backBarButtonItem setTitleTextAttributes:titleAttributes forState:UIControlStateNormal]; 

当然,使用外观代理工作正常,以及(见下文),但如上所述本弄乱由OS提供导航栏。

[[UIBarButtonItem appearance] setTitleTextAttributes:titleAttributes forState:UIControlStateNormal]; 
+0

的问题是,在'backBarButtonItem'属性本身是'nil'!所以,向它传递任何消息都将不起作用。正如@βhargavḯ指出的那样,这与文档一致。因此,如果不使用“外观”API,您可以在代码中创建具有所需自定义设置的“UIBarButtonItem”实例,并将其设置为后退按钮。 – trss

回答

2

只有在UIBarButtonItems存在于特定视图层次结构中时,才能定位UIBarButtonItems的外观。所以,你可以创建的UINavigationController的一个子类,说MyNavigationController做:

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], [MyNavigationController class], nil] setTitleTextAttributes:titleAttributes forState:UIControlStateNormal];

+0

这似乎是与'appearance' API结合使用的最简单的方法。 –

1

我似乎无法找到有关修改后退按钮的标题属性(文本颜色,阴影颜色等)的信息 - 当然你不会找到。

UINavigationItem Class Reference

如果要指定自定义图像或标题为返回键, 你可以指定一个自定义栏按钮项(与您的自定义标题或 图像)这个属性,而不是。配置您的酒吧按​​钮 项目时,请勿为其分配自定义视图;导航项目无论如何都会忽略后栏按钮中的自定义视图 。