IB_DESIGNABLE Class 未在 Interface Builder 上呈现
IB_DESIGNABLE Class not rendering on Interface Builder
这是我在 Xcode 上第一次尝试使用 IB_DESIGNABLE。
我有这个 class 可以给 NSView 添加颜色。
header
#import <Cocoa/Cocoa.h>
IB_DESIGNABLE @interface NSViewComCor : NSView
@property (nonatomic, weak) IBInspectable NSColor *backgroundColor;
@end
实施
#import "NSViewComCor.h"
@implementation NSViewComCor
@synthesize backgroundColor = _backgroundColor;
- (void)awakeFromNib {
[super awakeFromNib];
[self setWantsLayer:YES];
self.backgroundColor = [NSColor whiteColor]; //default color
}
- (NSColor *) backgroundColor
{
CGColorRef colorRef = self.layer.backgroundColor;
return [NSColor colorWithCGColor:colorRef];
}
- (void) setBackgroundColor:(NSColor *)backgroundColor
{ // color should change when changed on interface builder inspectable color box
self.layer.backgroundColor = backgroundColor.CGColor;
_backgroundColor = backgroundColor;
}
即使使用 IB_DESIGNABLE,此 class 也不会在界面生成器上以正确的颜色呈现...为什么?
正如 WWDC 2014 "What's New in Interface Builder" 视频中指出的那样,您必须:
创建框架。
创建class.
将视图标记为可设计(并将属性标记为可检查)。
回到主项目,在Interface Builder中指定基础class。
例如,我向项目添加了一个新的 "framework" 目标,并向该框架添加了以下 NSView
subclass 源:
IB_DESIGNABLE @interface CustomView : NSView
@property (nonatomic, strong) IBInspectable NSColor *backgroundColor;
@end
和
@implementation CustomView
- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];
[self.backgroundColor setFill];
NSRectFill(dirtyRect);
}
@end
然后,当我回到我的主项目并尝试将这个 CustomView
作为我的故事板上的子视图添加时,"background color" 是 IB "inspectable" 我可以看到变化在 IB 中立即呈现的颜色。
这是我在 Xcode 上第一次尝试使用 IB_DESIGNABLE。
我有这个 class 可以给 NSView 添加颜色。
header
#import <Cocoa/Cocoa.h>
IB_DESIGNABLE @interface NSViewComCor : NSView
@property (nonatomic, weak) IBInspectable NSColor *backgroundColor;
@end
实施
#import "NSViewComCor.h"
@implementation NSViewComCor
@synthesize backgroundColor = _backgroundColor;
- (void)awakeFromNib {
[super awakeFromNib];
[self setWantsLayer:YES];
self.backgroundColor = [NSColor whiteColor]; //default color
}
- (NSColor *) backgroundColor
{
CGColorRef colorRef = self.layer.backgroundColor;
return [NSColor colorWithCGColor:colorRef];
}
- (void) setBackgroundColor:(NSColor *)backgroundColor
{ // color should change when changed on interface builder inspectable color box
self.layer.backgroundColor = backgroundColor.CGColor;
_backgroundColor = backgroundColor;
}
即使使用 IB_DESIGNABLE,此 class 也不会在界面生成器上以正确的颜色呈现...为什么?
正如 WWDC 2014 "What's New in Interface Builder" 视频中指出的那样,您必须:
创建框架。
创建class.
将视图标记为可设计(并将属性标记为可检查)。
回到主项目,在Interface Builder中指定基础class。
例如,我向项目添加了一个新的 "framework" 目标,并向该框架添加了以下 NSView
subclass 源:
IB_DESIGNABLE @interface CustomView : NSView
@property (nonatomic, strong) IBInspectable NSColor *backgroundColor;
@end
和
@implementation CustomView
- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];
[self.backgroundColor setFill];
NSRectFill(dirtyRect);
}
@end
然后,当我回到我的主项目并尝试将这个 CustomView
作为我的故事板上的子视图添加时,"background color" 是 IB "inspectable" 我可以看到变化在 IB 中立即呈现的颜色。