1

这是我第一次尝试在 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,此类也不会在界面生成器上以正确的颜色呈现...为什么?

4

1 回答 1

4

正如 WWDC 2014 “Interface Builder 中的新功能”视频中所指出的,您必须:

  1. 创建框架。

  2. 创建班级。

  3. 将视图标记为可设计(并将属性标记为可检查)。

  4. 回到主项目并在 Interface Builder 中指定基类。

例如,我在项目中添加了一个新的“框架”目标,并将以下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作为子视图添加到我的故事板上时,“背景颜色”是 IB“可检查的”,我可以看到立即在 IB 中呈现的颜色变化。

于 2015-01-16T04:00:37.630 回答