1

UIPickerView在 的子类中有一个视图UINavigationController。我有一个UIAppearance代理,我想将其应用于UINavigationController子类中包含的许多视图,但我不希望UIAppearanceUIPickerView.

有没有办法让UIAppearance代理应用于UINavigationController子类内的所有视图,然后保护特定对象内的视图免受其影响?

如果没有 UIAppearance,屏幕如下所示:

没有 UI 外观

使用此代码:

#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;
}

屏幕如下所示:

带有 UI 外观

我不希望 UIPickerview 的子视图被青色破坏,尽管我可能想将青色应用于 UINavigationController 中包含的许多其他视图。

4

1 回答 1

0

我不确定您到底要完成什么,但这是您的代码正在发生的事情。

您正在将导航控制器内的所有视图背景颜色设置为青色。UIPickerView 是一个视图,所以它的颜色发生了变化。

编辑:

我认为外观协议对于您真正想要的东西可能只是矫枉过正。您想更改选择器视图后面的视图颜色,然后继续设置其背景颜色。

[[self YOUR_VIEW] setBackgroundColor:[UIColor blueColor]];

如果您想将某个视图的所有内容更改为特定颜色,则外观协议可以很好地工作。例如,您希望所有导航栏都为红色,您可以将其设置在一个位置,它会更改应用程序中的所有导航栏。

为此,您必须将所有想要成为蓝色的视图子类化,并使用外观协议方法appearanceWhenContainedIn 设置它们。

于 2013-05-18T20:44:56.457 回答