我在UIPickerView
的子类中的视图中有一个UINavigationController
。我有一个UIAppearance
代理,我想应用于UINavigationController
子类中包含的许多视图,但我不希望UIAppearance
对UIPickerView
进行操作。< / p>
有没有办法让UIAppearance
代理适用于UINavigationController
子类中的所有视图,然后保护特定对象内的视图不受其影响?
没有UIAppearance,屏幕看起来像这样:
使用此代码:
#import "AppDelegate.h"
@interface AppDelegate()
@property (nonatomic, strong) UINavigationController *nvcMain ;
@end
@implementation AppDelegate
@synthesize window ;
@synthesize nvcMain ;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] ;
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main_ph" bundle:nil] ;
nvcMain = [sb instantiateInitialViewController] ;
window.rootViewController = nvcMain ;
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
id apprNVCView = [UIView appearanceWhenContainedIn:[UINavigationController class], nil] ;
[apprNVCView setBackgroundColor:[UIColor cyanColor] ];
return YES;
}
屏幕看起来像这样:
我不希望UIPickerview的子视图被青色破坏,尽管我可能想将青色应用于UINavigationController中包含的许多其他视图。
答案 0 :(得分:0)
我不确定您要完成的是什么,但这是您的代码正在发生的事情。
您正在导航控制器中将所有视图背景颜色设置为青色。 UIPickerView是一个视图,因此它的颜色会发生变化。
编辑:
我认为外观协议可能只是你真正想要的东西。您想要更改选择器视图后面的视图颜色,然后继续并设置其背景颜色。
[[self YOUR_VIEW] setBackgroundColor:[UIColor blueColor]];
如果要将特定视图的所有视图更改为特定颜色,则外观协议可以正常工作。例如,您希望所有导航栏都是红色,您可以在一个位置设置它,它将更改应用程序中的所有导航栏。
要使其工作,您必须将所有想要成为蓝色的视图子类化,并使用外观协议方法appearanceWhenContainedIn设置它们。