1

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

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

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

我得到一个编译错误和最后一行的警告:“不兼容的指针类型将'TimeSlipViewButton *__strong'发送到'NSView *'类型的参数”。

我有一种感觉,我误解了一些非常基本的东西,并且由于某种原因,我不能只addSubview:从 NSView 中传递我的 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
4

1 回答 1

1

单元格不是视图,因此不能这样使用!您所做的不起作用
您在将其添加为子视图时完全尝试

单元格是一个(遗留)概念,其中视图过于昂贵。

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


Button CONTAINS a button cell
它不是一个按钮单元,它是一个 NSView


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

于 2013-02-24T17:33:11.607 回答