通过设置具有外观的UIButton
的 Titlecolor ,UIMenuItems
UIMenuController
中的UITextView
获得相同的颜色。
applicationDidFinishLaunching
中的代码:[[UIButton appearance] setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];
有没有办法压制它
或
给另一种颜色UIMenuItems
?
with appearanceWhenContainedIn UITextview
我试图用文本设置TextViews中包含的按钮的外观
[UIButton appearanceWhenContainedIn:[UITextView class], nil]
但是这显然不起作用,因为UIMenuController
不在TextView中。
with appearanceWhenContainedIn UIMenuController/UIMenuItem
是不可能的,因为两者都没有实现UIAppearanceContainer协议。
答案 0 :(得分:5)
我找到了两种解决此问题的方法。
以下是以下解决方案的结果截图:
UIMenuController未包含在View Controller视图层次结构中。因此,您可以通过这种方式定义UIButton颜色(而不是设置全局Button 外观):
斯威夫特:
UIButton.appearanceWhenContainedInInstancesOfClasses([UIViewController.self]).setTitleColor(UIColor.redColor(), forState: UIControlState.Normal)
目标C:
[[UIButton appearanceWhenContainedInInstancesOfClasses:@[UIViewController.class]] setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
该解决方案适用于大多数情况。但是,如果您使用表格查看单元格的删除按钮或操作按钮,它也将采用设置颜色,您无法更改颜色通过外观代理。
第二个解决方案直接使用Apple在菜单控制器中使用的私有UIButton子类类名。 我绝不会建议访问私有Apple类(以及其名称),但在特定的Menu Controller颜色定制案例中,我认为这是最好的解决方案。它允许您定义视图外观的干净方式。
斯威夫特:
定义全局按钮标题颜色外观:
UIButton.appearance().setTitleColor(UIColor.redColor(), forState: UIControlState.Normal)
MenuController的特殊例外:
(NSClassFromString("UICalloutBarButton")! as! UIButton.Type).appearance().setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
目标C:
定义全局按钮标题颜色外观:
[[UIButton appearance] setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
MenuController的特定异常:
[[NSClassFromString(@"UICalloutBarButton") appearance] setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];