这是我第一次尝试在Xcode上使用IB_DESIGNABLE。
我有这个类为NSView添加颜色。
标题
#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,此类也不会在界面构建器上使用正确的颜色进行渲染...为什么?
答案 0 :(得分:3)
正如WWDC 2014 "What's New in Interface Builder"视频中指出的那样,您必须:
创建框架。
创建课程。
将视图标记为可设计(并将属性标记为可检查)。
返回主项目并在Interface Builder中指定基类。
例如,我添加了一个新的&#34;框架&#34;定位到项目,并将以下NSView
子类源添加到该框架:
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
作为子视图时,&#34;背景颜色&#34;是IB&#34;可检查&#34;我可以看到IB中立即呈现的颜色变化。