当我试图清理一些代码时,我想使用视图的外观。但UIButton
让我感到麻烦。我尝试了以下方法:
[[UIButton appearanceWhenContainedInInstancesOfClasses:@[[UIViewController class]]] setBackgroundColor:[UIColor redColor]];
[[UIButton appearanceWhenContainedInInstancesOfClasses:@[[UIViewController class]]] setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
这就像预期的那样工作,我的所有按钮都变成了蓝色的红色(在我的项目中我使用了其他颜色)。我注意到导航栏中的按钮也转了,这是我不喜欢的,所以添加这一行修复了第一个问题:
[[UIButton appearanceWhenContainedInInstancesOfClasses:@[[UINavigationBar class], [UIViewController class]]] setBackgroundColor:[UIColor clearColor]];
但这些不是唯一的按钮。 iPad上的键盘按钮(撤消,重做和粘贴)也具有默认的其他外观。有什么办法可以解决这个问题吗?此外,是否有一个外观列表,我可以安全使用而不“打破”其他视图(如在这种情况下键盘按钮)?我不是在谈论所有外观的清单,因为我发现了here。
我的想法是只选择UIViewController
中的按钮(其中还包含导航栏),但显然键盘也是UIViewController
的子项。我希望有一种方法可以不需要在按钮周围添加自定义视图或包装器。
答案 0 :(得分:1)
创建MyBaseViewController作为UIViewController的子类,具有空实现。将所有viewControllers更改为从MyBaseViewController继承。将您的调用更改为appearanceWhenContainedInInstancesOfClasses方法以引用MyBaseViewController。
您当前的代码将影响UIViewController的所有实例,包括嵌入在Foundation或UIKit中的实例。通过使用您自己的基类,您实际上创建了一个过滤器,可以将viewControllers与其他基类隔离开来。