【发布时间】:2013-06-06 15:24:15
【问题描述】:
我正在尝试自定义一个嵌入在 UINavigationBar 中的 UIBarButtonItem。
我想自定义背景图片以及标题文本属性。
但是,如果导航栏包含在 UIPopoverController 中,我不希望进行这些自定义。
这是我的代码:
//1.
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationController class], nil]
setBackgroundImage:[UIImage imageNamed:@"navigationBarBackgroundNormal"]
forState:UIControlStateNormal
forBarMetrics:UIBarMetricsDefault];
//2.
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationController class], nil]
setBackgroundImage:[UIImage imageNamed:@"navigationBarBackgroundHighlighted"]
forState:UIControlStateHighlighted
forBarMetrics:UIBarMetricsDefault];
//3.
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationController class], nil]
setTitleTextAttributes:@{UITextAttributeTextColor:[UIColor blueColor]}
forState:UIControlStateNormal];
//4.
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationController class], nil]
setTitleTextAttributes:@{UITextAttributeTextColor:[UIColor whiteColor]}
forState:UIControlStateHighlighted];
//5.
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationController class], [UIPopoverController class], nil]
setBackgroundImage:nil
forState:UIControlStateNormal
forBarMetrics:UIBarMetricsDefault];
//6.
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationController class], [UIPopoverController class], nil]
setBackgroundImage:nil
forState:UIControlStateHighlighted
forBarMetrics:UIBarMetricsDefault];
//7.
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationController class], [UIPopoverController class], nil]
setTitleTextAttributes:nil
forState:UIControlStateNormal];
//8.
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationController class], [UIPopoverController class], nil]
setTitleTextAttributes:nil
forState:UIControlStateHighlighted];
问题是:
我创建了一个导航控制器作为弹出框的 contentViewController。
当按下另一个视图控制器时,会自动创建一个后退按钮,并且适用的外观来自第 5、6、7、8 行 - 这很好。
但是,当我创建一个新的 UIBarButtonItem 并将其指定为 rightBarButtonItem 时,将应用第 3、4、5、6 行(意思是,外观代理,出于某种原因,应用了行中的标题属性3,4,即使导航栏在弹出窗口中。但是当涉及到背景图像时,外观代理正确地应用了行 5,6)
当导航栏不在弹出窗口中时,一切正常(应用第 1、2、3、4 行)。
我不明白为什么外观代理对后退按钮起作用,但不适用于我正在创建的UIBarButtonItem,当导航控制器处于弹出框时。
【问题讨论】:
标签: ios objective-c uibarbuttonitem uiappearance