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

我观察到以下情况:

通过设置UIButtonTitlecolor 外观,UITextViewUIMenuController 中的UIMenuItems 将获得相同的颜色。

applicationDidFinishLaunching中的代码:

[[UIButton appearance] setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];  

我的问题:

有没有办法抑制它

UIMenuItems另一种颜色?

我尝试过的:

  1. 有外观WhenContainedIn UITextview
    我尝试使用
    [UIButton appearanceWhenContainedIn:[UITextView class], nil]
    设置 TextViews 中包含的按钮的外观 但这显然不起作用,因为 UIMenuController 不在 TextView 内。

  2. 带有外观WhenContainedIn UIMenuController/UIMenuItem
    不可能,因为两者都没有实现 UIAppearanceContainer 协议。

【问题讨论】:

标签: uibutton uiappearance uimenucontroller


【解决方案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 似乎不是有效代码
猜你喜欢
  • 2012-09-05
  • 2012-09-30
  • 1970-01-01
  • 2022-08-23
  • 1970-01-01
  • 2013-09-15
  • 1970-01-01
  • 2015-09-14
  • 1970-01-01
相关资源
最近更新 更多