IB_DESIGNABLE类不在Interface Builder上呈现

时间:2015-01-16 01:30:47

标签: xcode cocoa interface-builder ibdesignable ibinspectable

这是我第一次尝试在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,此类也不会在界面构建器上使用正确的颜色进行渲染...为什么?

1 个答案:

答案 0 :(得分:3)

正如WWDC 2014 "What's New in Interface Builder"视频中指出的那样,您必须:

  1. 创建框架。

  2. 创建课程。

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

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

  5. 例如,我添加了一个新的&#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中立即呈现的颜色变化。