为什么我不能将自定义NSButtonCell添加到NSView?

时间:2013-02-24 17:05:44

标签: objective-c cocoa

我正在尝试创建一个包含播放/暂停按钮的自定义视图,我会将任意数量的视图附加到NSWindow。我开始创建自己的NSView,然后绘制各种部分,然后将播放/暂停按钮子类化为NSView(婴儿步骤)。

这一切都很好,直到我决定我的按钮需要扩展NSButtonCell而不是NSView。以下(来自TimeSlipView.m)失败了,我似乎无法弄清楚原因:

playPauseButton = [[TimeSlipViewButton alloc] init];
[playPauseButton setButtonType:NSMomentaryPushInButton];
[self addSubview:playPauseButton];

我收到编译错误,并在最后一行发出此警告:“不兼容的指针类型将'TimeSlipViewButton * __ strong'发送到'NSView *'类型的paremeter”。

我有一种感觉,我误解了一些非常基本的东西,而且出于某种原因我不能只从NSView中传递addSubview:我的NSButtonCell。

TimeSlipView.h

#import <Cocoa/Cocoa.h>
#import "TimeSlipViewButton.h"

@interface TimeSlipView : NSView {
    TimeSlipViewButton *playPauseButton;
    NSView *timerText;
    NSView *clientText;
    NSView *projectText;
    NSView *taskText;
}

@end

TimeSlipViewButton.h

#import <Cocoa/Cocoa.h>

@interface TimeSlipViewButton : NSButtonCell

@end

1 个答案:

答案 0 :(得分:1)

单元格没有视图,因此不能这样使用! 你做的不起作用
将其添加为子视图时,您可以尝试使用

单元格是(遗留)概念,其中视图太昂贵。

某些控件(如NSButton)使用/来处理实际绘图。


按钮包含按钮单元
它是一个按钮单元,它是一个NSView


您可能想要做的是为NSButton提供一个具有自定义绘图选项的特定ButtonCell。给出现有的NSButtons / NSSegmentedCells / NSTextFields自定义NSCells有很好的教程