受 UIButton 外观设置影响的 UIMenuController 中的文本颜色
Posted
技术标签:
【中文标题】受 UIButton 外观设置影响的 UIMenuController 中的文本颜色【英文标题】:Text color in UIMenuController affected by UIButton appearance setting 【发布时间】:2014-10-20 09:05:53 【问题描述】:我观察到以下情况:
通过设置UIButton
的Titlecolor 外观,UITextView
的UIMenuController
中的UIMenuItems
将获得相同的颜色。
applicationDidFinishLaunching
中的代码:
[[UIButton appearance] setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];
我的问题:
有没有办法抑制它或
给UIMenuItems
另一种颜色?
我尝试过的:
有外观WhenContainedIn UITextview
我尝试使用[UIButton appearanceWhenContainedIn:[UITextView class], nil]
设置 TextViews 中包含的按钮的外观
但这显然不起作用,因为 UIMenuController
不在 TextView 内。
带有外观WhenContainedIn UIMenuController/UIMenuItem
不可能,因为两者都没有实现 UIAppearanceContainer 协议。
【问题讨论】:
另见:***.com/questions/5466570/… 我遇到了完全相同的问题。您找到解决方案了吗? 不,我无法修复它。 :// 【参考方案1】:我找到了两种解决此问题的方法。
这是以下解决方案的结果截图:
第一个解决方案
UIMenuController 不包含在 View Controller 视图层次结构中。因此,您可以通过这种方式定义您的 UIButton 颜色(而不是设置全局按钮 外观):
斯威夫特:
UIButton.appearanceWhenContainedInInstancesOfClasses([UIViewController.self]).setTitleColor(UIColor.redColor(), forState: UIControlState.Normal)
Objective-C:
[[UIButton appearanceWhenContainedInInstancesOfClasses:@[UIViewController.class]] setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
该解决方案适用于大多数情况。但是如果您使用删除按钮或表格视图单元格的操作按钮,它也会采用设置的颜色,而您将无法更改该颜色 通过外观代理。
第二个解决方案(我的首选)
第二种解决方案直接使用 Apple 在 Menu Controller 中使用的 private UIButton subclass 类名。 我永远不会建议访问私有 Apple 类(以及通过它的名称),但在那个特定的菜单控制器颜色自定义案例中,我认为这是最好的解决方案。它可以让您定义视图外观的简洁方式。
斯威夫特:
定义您的全局按钮标题颜色外观:
UIButton.appearance().setTitleColor(UIColor.redColor(), forState: UIControlState.Normal)
MenuController 的特定异常:
(NSClassFromString("UICalloutBarButton")! as! UIButton.Type).appearance().setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
Objective-C:
定义你的全局按钮标题颜色外观:
[[UIButton appearance] setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
MenuController 的特定异常:
[[NSClassFromString(@"UICalloutBarButton") appearance] setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
【讨论】:
UIButton.appearance().setTitleColor
似乎不是有效代码以上是关于受 UIButton 外观设置影响的 UIMenuController 中的文本颜色的主要内容,如果未能解决你的问题,请参考以下文章
如何修改 UIBarButtonItem 和 UIButton 的 UIMenu
UIButton 外观 setBackgroundColor 更新后现在影响导航栏
为啥 -[[UIButton appearance] setBackgroundImage] 会影响 UIBarItem 对象的初始外观以及如何纠正它?