First Go at Using IB_DESIGNABLE and IBInspectable

In AppKit, views don’t have a backgroundColor property. This isn’t a great big pain or anything — just a small thing. But nice to solve.

There are many times when I have a view that contains other views and the container view should have a background color. (And be opaque. I’m a big fan of opaque views.)

And sometimes I just need a divider — and a divider is, after all, just a thin view with a background color.

And I’d really love it if I could set the colors in Interface Builder, and I’d love it if IB actually drew the correct background colors. That would go a surprisingly long way toward making IB a WYSIWYG editor.

So here’s what I did:

Created BackgroundColorView.

In the .h file:

IB_DESIGNABLE
@interface BackgroundColorView : NSView

@property (nonatomic) IBInspectable NSColor *backgroundColor;

@end

In the .m file:

- (BOOL)isOpaque {

  return YES;
}

- (void)drawRect:(NSRect)r {

  [self.backgroundColor setFill];
  NSRectFill(r);
}

And then in IB I just use a BackgroundColorView (I set the Custom Class to BackgroundColorView), and it does what I want. I can set the color in IB, and IB draws the correct background color.

I like it. It means that I’m not the bottleneck — designers can change the background color themselves. Cool.

08 Nov 2014

Archive