受 UIButton 外观设置影响的 UIMenuController 中的文本颜色

Posted

技术标签:

【中文标题】受 UIButton 外观设置影响的 UIMenuController 中的文本颜色【英文标题】:Text color in UIMenuController affected by UIButton appearance setting 【发布时间】:2014-10-20 09:05:53 【问题描述】:

我观察到以下情况:

通过设置UIButtonTitlecolor 外观,UITextViewUIMenuController 中的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 对象的初始外观以及如何纠正它?

UIButton 外观还设置了键盘按钮

iOS 14 从 UIView 呈现 UIMenu

iOS 8:UIButton 外观字体