我正在尝试在UIBarButtonItem
嵌入UINavigationBar
时自定义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];
中,我不希望进行这些自定义。
这是我的代码:
UIBarButtonItem
问题是:
我创建了一个导航控制器作为popover的contentViewController
当按下另一个视图控制器时,会自动创建一个后退按钮,并且适用的外观来自第5,6,7,8行 - 这很好。
然而,当我创建一个新的rightBarButtonItem
并将其指定为UIBarButtonItem
时,将应用第3,4,5,6行(意思是,出于某种原因,外观代理应用了第3,4行的标题属性,即使导航栏位于弹出窗口中。但是当涉及到背景图像时,外观代理正确应用了行5,6)
当导航栏不在弹出窗口中时,一切正常(应用了1,2,3,4行)。
当导航控制器处于弹出框中时,我无法弄清楚外观代理为什么应该对后退按钮起作用,而不是我正在创建的{{1}}。
答案 0 :(得分:0)
我认为文档中的这一段会帮助你:
在任何给定的视图层次结构中,最外层的外观代理获胜。 特异性(链条的深度)是决胜局。换一种说法, 外观中的包含声明如果被占用:被视为 部分订购。给出具体的排序(实际的子视图 层次结构),UIKit选择第一个部分排序 从窗口向下读取实际层次结构时的唯一匹配。