gpt4 book ai didi

nstableview - 没有NIB的基于 View 的NSOutlineView?

转载 作者:行者123 更新时间:2023-12-04 11:25:28 27 4
gpt4 key购买 nike

NSOutlineViewNSTableView 的子类.目前,NSTableView支持两种实现。

  • 基于细胞。
  • 基于 View 。

  • 要制作 OSX 10.8 Finder 样式的侧边栏( 具有自动灰色图标样式 ),需要使用具有源列表突出显示样式的基于 View 的表格 View 。

    对于 NIB,这是典型的工作。没什么难的。 (参见 SidebarDemo )但我想避免使用任何 NIB 或 Interface Builder。我想纯粹以编程方式制作侧边栏。

    在这种情况下,我有很大的问题。 AFAIK,无法为特定单元格提供原型(prototype) View 。当我打开 .xib文件,我看到 <tableColumn>包含 <prototypeCellViews> .这指定了该列将使用什么 View 。我找不到如何使用公共(public) API 以编程方式设置它。

    作为一种解决方法,我尝试使用 -[NSTableView makeViewWithIdentifier:owner:] 手动制作单元格。和 -[NSTableView viewAtColumn:row:makeIfNecessary:] ,但它们都没有返回 View 实例。我创建了一个 NSTableCellView ,但它没有 ImageView 和文本字段实例。我也尝试设置它们,但是这些字段被标记为 assign所以实例立即释放。我试图通过强制保留它们来保留它,但它不起作用。 NSTableView不管理它们,所以我确信表格 View 不喜欢我的实现。

    我相信有一个属性可以为列设置此原型(prototype) View 。但我找不到他们。我在哪里可以找到该属性并使系统默认 NSOutlineView以编程方式使用源列表样式?

    最佳答案

    如果您按照 SidebarDemo 中的示例进行操作,他们使用 NSTableCellView 的子类对于详细信息行。为了模拟 界面生成器 mojo,您可以在构造函数中将所有内容 Hook 。其余部分与演示相同(参见 outlineView:viewForTableColumn:item:)。

    @interface SCTableCellView : NSTableCellView
    @end

    @implementation SCTableCellView

    - (id)initWithFrame:(NSRect)frameRect {
    self = [super initWithFrame:frameRect];
    [self setAutoresizingMask:NSViewWidthSizable];
    NSImageView* iv = [[NSImageView alloc] initWithFrame:NSMakeRect(0, 6, 16, 16)];
    NSTextField* tf = [[NSTextField alloc] initWithFrame:NSMakeRect(21, 6, 200, 14)];
    NSButton* btn = [[NSButton alloc] initWithFrame:NSMakeRect(0, 3, 16, 16)];
    [iv setImageScaling:NSImageScaleProportionallyUpOrDown];
    [iv setImageAlignment:NSImageAlignCenter];
    [tf setBordered:NO];
    [tf setDrawsBackground:NO];
    [[btn cell] setControlSize:NSSmallControlSize];
    [[btn cell] setBezelStyle:NSInlineBezelStyle];
    [[btn cell] setButtonType:NSMomentaryPushInButton];
    [[btn cell] setFont:[NSFont boldSystemFontOfSize:10]];
    [[btn cell] setAlignment:NSCenterTextAlignment];
    [self setImageView:iv];
    [self setTextField:tf];
    [self addSubview:iv];
    [self addSubview:tf];
    [self addSubview:btn];
    return self;
    }

    - (NSButton*)button {
    return [[self subviews] objectAtIndex:2];
    }

    - (void)viewWillDraw {
    [super viewWillDraw];
    NSButton* btn = [self button];
    ...

    关于nstableview - 没有NIB的基于 View 的NSOutlineView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19464136/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com