いくつかのテストを行うために、相対的な NSCell を使用して非常に単純な NSControl を作成しました。このコントロールをウィンドウに追加するには、「Interface Builder」で NSView をドラッグし、そのクラスを に変更しMyControl
ます。
ここに私のコード:
THE NSコントロール
@implementation MYControl
+ (void)initialize
{
if (self == [MYControl class])
{
[self setCellClass: [MYCell class]];
}
}
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
}
return self;
}
+(Class)cellClass{
return [MYCell class];
}
@end
THE NSCell
@implementation MYCell
-(void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView{
/*
[[NSGraphicsContext currentContext]saveGraphicsState];
[[NSColor redColor]set];
[NSBezierPath fillRect:cellFrame];
[[NSGraphicsContext currentContext]restoreGraphicsState];*/
}
@end
NSControl クラスから MyCell へのすべての参照を削除すると、機能します (ただし、明らかに何も表示されません)。それ以外の場合、アプリを起動すると、いくつかのエラーが発生します。
<Error>: kCGErrorFailure: CGSShapeWindow
<Error>: kCGErrorFailure: Set a breakpoint @ CGErrorBreakpoint() to catch errors as they are logged.
_NXPlaceWindow: error setting window shape (1000)
<Error>: kCGErrorFailure: CGSShapeWindow
_NSShapeRoundedWindowWithWeighting: error setting window shape (1000)
何を間違えたの?XCode4/IB 経由でカスタム NSControl を正しくセットアップするにはどうすればよいですか? ドキュメントから IB Palette について何かを読みましたが、Xcode 4.0 では使用できないと思います
編集:
initWithFrame を使用してプログラムで NSControl を追加すると機能します