【问题标题】:Why can't I add custom NSButtonCell to NSView?为什么我不能将自定义 NSButtonCell 添加到 NSView?
【发布时间】:2013-02-25 01:36:14
【问题描述】:

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

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

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

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

我感觉我误解了一些非常基本的东西,出于某种原因,我不能只从 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

【问题讨论】:

    标签: objective-c cocoa


    【解决方案1】:

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

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

    一些控件(如 NSButton)使用它们来处理实际绘图。


    按钮包含一个按钮单元
    它不是纽扣电池,而是 NSView


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

    【讨论】:

    • 永远不会将单元格添加到视图层次结构中。当拥有该单元格的 nsview 被要求将其绘制到该单元格时,会明确地将其委托给该单元格。
    • 谢谢你,Daij-Djan。我现在明白我在设计上滥用了 NSButtonCell,并且我忽略了注意它的继承。感谢您的帮助!
    • 对不起,如果听起来很刺耳 - 心情不好:D - 无论如何,如果你对细胞有具体问题(我不喜欢它们的存在),请问:D
    • 一点也不苛刻!无论如何,这有点像 RTFM 的情况。谢谢先生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 2014-05-19
    • 2011-01-30
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多