iOS:只改变UIView的外观(没有子类) - 可能吗?

时间:2013-04-18 16:19:53

标签: ios uiappearance

我有一个包含许多视图控制器的项目,我希望它们都具有平铺背景图像的父视图。现在我可以做到

[[UIView appearance] setBackgroundColor:
    [UIColor colorWithPatternImage:[UIImage imageNamed:@"BackgroundPattern"]]];

问题是,这还将设置所有其他UIView子类化对象(UIButtonsUILabels等)的背景。如何更改UIView背景?

我该怎么办?

3 个答案:

答案 0 :(得分:6)

如果您在班级使用appearance代理,则别无选择。您将修改每个UIView子类。

我没有看到许多其他选项来继承UIViewController,只更改该子类'视图的外观,然后创建第一个的所有其他UIViewController子类。

答案 1 :(得分:3)

您可以在每种类型上创建类别,并添加一个设置角半径的UIAppearance选择器。

UIView + Appearance.h文件:

#import <UIKit/UIKit.h>

@interface UIView (Appearance)
- (void)setCornerRadius:(CGFloat)cornerRadius UI_APPEARANCE_SELECTOR;

@end

UIView + Appearance.m文件:

#import "UIView+Appearance.h"

@implementation UIView (Appearance)
- (void)setCornerRadius:(CGFloat)cornerRadius {
    self.layer.cornerRadius = cornerRadius;
}

@end

AppDelegate.m文件:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.

    [[UIView appearanceWhenContainedIn:[ViewController class], nil] setCornerRadius:5.0];

    return YES;
}

答案 2 :(得分:2)

你可以创建一个UIViewController的子类,调用它像MyTiledViewController,在init / viewDidLoad方法中写这个...

[self.view setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"BackgroundPattern"]]];

修改 看起来Gabriele Petronella打败了我,真的是这样。