你如何自定义groupItem,看在一个基于视图的NSOutlineView?(How do you

2019-10-22 01:41发布

我怎么可以自定义groupItem,看在一个基于视图的NSOutlineView? 我想摆脱分频器边框,改变背景颜色,使三角形暗。 三角形的背景应的颜色与groupItem视野用的背景相同。

我找不到直通全能的谷歌的任何相关信息。

Answer 1:

要自定义(或隐藏)三角形按钮只是覆盖NSOutlineView类。 兴趣的方法是- (id)makeViewWithIdentifier:(NSString *)identifier owner:(id)owner

// your NSOutlineView child class

- (id)makeViewWithIdentifier:(NSString *)identifier owner:(id)owner
{
   id view = [super makeViewWithIdentifier:identifier owner:owner];
   if ([identifier isEqualToString:@"NSOutlineViewDisclosureButtonKey"])
     {
      NSButton *triangleButton = (NSButton *)view;
      NSImage *image = [[NSImage alloc] init]; // you could set another images
      [triangleButton setImage:image];
      [triangleButton setAlternateImage:image];
     }
   return view;
}

三角按钮必须因为现在被隐藏。 但仍有缺口问题,您可扩展项目。

打开界面生成器并选择您的大纲视图实例。 打开属性检查器中,缩进属性设置为零。

更新

在团体项目视图有三角形后面的空白处。 只需将其删除缩进属性设置为零正如我上面所说。

要设置自定义分隔符只是删除NSOutlineView的那些和自己绘制它(在drawRect的“细胞”类的方法),如果你想定制披露按钮,实现自己在NSView-“细胞”的子类。



Answer 2:

下面NSOutlineView *键使用的查看基于NSOutlineView创建用于折叠和展开项目“披露按钮”。

APPKIT_EXTERN NSString * const NSOutlineViewDisclosureButtonKey NS_AVAILABLE_MAC(10_9); // The normal triangle disclosure button
APPKIT_EXTERN NSString * const NSOutlineViewShowHideButtonKey NS_AVAILABLE_MAC(10_9); // The show/hide button used in "Source Lists"

所述NSOutlineView通过调用创建这些按钮[self makeViewWithIdentifier:owner:]通过在密钥作为标识符和委托作为所有者。 定制NSButtons(或其亚类)可以提供用于在NSOutlineView通过以下两种方式使用:

  1. makeViewWithIdentifier:所有者:可以被覆盖,并且如果标识符是(例如)NSOutlineViewDisclosureButtonKey,定制NSButton可以被配置并返回。 一定要设置button.identifier是NSOutlineViewDisclosureButtonKey。

  2. 在设计时,一个按钮可以被添加到具有这种标识符的outlineview,它将取消存档,并根据需要使用。

    当使用自定义按钮,重要的是要正确设置目标/行动做一些事情(可能展开或折叠rowForView:发件人位于)。 或者,你可以调用超级获取默认的按钮,然后复制它的目标/行动得到正常的默认行为。

    注意:这些键是10.7向后兼容,但是,符号不之前10.9导出,并必须使用常规字符串值(即:@“NSOutlineViewDisclosureButtonKey”)。

如果你想也改变位置,不是继承你的NSTableRowView并覆盖布局方法

- (void)layout {

    [super layout];

    for (NSView * v in self.subviews) {
        if ([v.identifier isEqual:NSOutlineViewDisclosureButtonKey]) {
            v.frame = NSMakeRect(self.bounds.size.width - 44, 0, 44, self.bounds.size.height);
            v.hidden = NO;
            break;
        }
    }

}

并为覆盖NSOutlineView代码

- (NSView *)makeViewWithIdentifier:(NSString *)identifier owner:(id)owner {

    NSView * v = [super makeViewWithIdentifier:identifier owner:owner];

    if ([identifier isEqual:NSOutlineViewDisclosureButtonKey] && ([v isKindOfClass:[NSButton class]])) {

        MenuDisclosureButton * b = [[MenuDisclosureButton alloc] initWithFrame:NSMakeRect(0, 0, 44, 44)];
        b.target = [(NSButton *)v target];
        b.action = [(NSButton *)v action];
        b.identifier = NSOutlineViewDisclosureButtonKey;
        v = b;

    }

    return v;
}


文章来源: How do you customise the groupItem-look in a view-based NSOutlineView?