是否可以自定义 UIMenuController 的颜色?

Posted

技术标签:

【中文标题】是否可以自定义 UIMenuController 的颜色?【英文标题】:Is it possible to customize the color of a UIMenuController? 【发布时间】:2011-03-29 00:24:53 【问题描述】:

默认背景颜色为黑色。如何更改颜色,类似于导航栏的tintColor

【问题讨论】:

【参考方案1】:

更改文本颜色 的一种可能解决方案是在 UIMenuController 中使用 UIButton 的外观代理。问题是它直接使用了 Apple 在菜单控制器中使用的私有 UIButton 子类。我永远不会建议访问私有 Apple 类(以及通过它的名称),但在那个特定的菜单控制器颜色自定义案例中,我认为这是最好的解决方案。它可以让您定义视图外观的简洁方式。

斯威夫特

(NSClassFromString("UICalloutBarButton")! as! UIButton.Type).appearance().setTitleColor(UIColor.redColor(), forState: UIControlState.Normal)

Objective-C

[[NSClassFromString(@"UICalloutBarButton") appearance] setTitleColor:[UIColor redColor] forState:UIControlStateNormal];

【讨论】:

有没有人在通过 App Store Review 时使用过这个? @shallowThought 是的,它通过了【参考方案2】:

我很确定这是不可能的。如果您将其子类化,您也许可以解决一些问题。

编辑:我查看了 UIMenuController.h 文件,似乎没有任何明显的方法可以更改颜色。如果对您有帮助,它是 NSObject 的子类。此外,如果您查看人们如何将 UITabBarController 子类化以更改其颜色,您可能会找到类似的解决方案。

【讨论】:

这是一个单例,只返回sharedMenuController,所以我不能继承它。不过还是谢谢你的回答! 这没什么用,但是你可以使用 UIAppearance 来改变 UIButton 的背景颜色。从那里圆角消失了。我认为如果图层发生更改,这可能是可修改的,但我看不到访问它的方法。【参考方案3】:

你可以像这样设置 UIMenuController 的背景颜色 -

Objective-C

[[NSClassFromString(@"UICalloutBarButton") appearance] setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0.8]];

确保您使用具有透明度/alpha 的颜色,否则会引发错误。

【讨论】:

以上是关于是否可以自定义 UIMenuController 的颜色?的主要内容,如果未能解决你的问题,请参考以下文章

使用自定义 UIMenuController 项从 UIPasteboard 中复制和检索值

自定义 UIMenuController

自定义 UIMenuController

UIMenuController 未在 UICollectionViewController 子类上显示自定义操作

从 UIMenuController 中删除自定义菜单项

如何显示自定义弹出窗口而不是 UIMenuController