yin*_*kou 9 uibutton uimenucontroller uiappearance
通过设置具有外观的a 的Titlecolor,a 中的a 得到相同的颜色.UIButtonUIMenuItemsUIMenuControllerUITextView
applicationDidFinishLaunching:[[UIButton appearance] setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)
有没有办法抑制它
或
给UIMenuItems另一种颜色?
withWhenContainedIn UITextview
我试图设置TextViews中包含的按钮的外观
[UIButton appearanceWhenContainedIn:[UITextView class], nil]
但是这显然不起作用,因为UIMenuController它不在TextView中.
使用appearanceWhenContainedIn UIMenuController/UIMenuItem
是不可能的,因为两者都没有实现UIAppearanceContainer协议.
我找到了两种方法来解决这个问题.
以下是以下解决方案的结果屏幕截图:
UIMenuController未包含在View Controller视图层次结构中.因此,您可以通过这种方式定义UIButton颜色(而不是设置全局Button 外观):
斯威夫特:
UIButton.appearanceWhenContainedInInstancesOfClasses([UIViewController.self]).setTitleColor(UIColor.redColor(), forState: UIControlState.Normal)
Run Code Online (Sandbox Code Playgroud)
Objective-C:
[[UIButton appearanceWhenContainedInInstancesOfClasses:@[UIViewController.class]] setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)
该解决方案适用于大多数情况.但是,如果您使用表视图单元格的删除按钮或操作按钮,它也将采用设置颜色,您将无法通过外观代理更改该颜色.
第二个解决方案直接使用Apple在菜单控制器中使用的私有UIButton子类类名.我永远不会建议访问私有Apple类(以及通过其名称),但在特定的菜单控制器颜色定制案例中,我认为这是最好的解决方案.它允许您定义视图外观的干净方式.
斯威夫特:
定义全局Button标题颜色外观:
UIButton.appearance().setTitleColor(UIColor.redColor(), forState: UIControlState.Normal)
Run Code Online (Sandbox Code Playgroud)
MenuController的特殊例外:
(NSClassFromString("UICalloutBarButton")! as! UIButton.Type).appearance().setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
Run Code Online (Sandbox Code Playgroud)
Objective-C:
定义全局Button标题颜色外观:
[[UIButton appearance] setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)
MenuController的特殊例外:
[[NSClassFromString(@"UICalloutBarButton") appearance] setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1392 次 |
| 最近记录: |