gpt4 book ai didi

cocoa - 如何在基于 View 的 NSOutlineView 中自定义 groupItem-look?

转载 作者:行者123 更新时间:2023-12-03 17:11:00 26 4
gpt4 key购买 nike

如何在基于 View 的 NSOutlineView 中自定义 groupItem-look?我想去掉分隔线边框,更改背景颜色并使披露三角形变暗。显示三角形的背景颜色应与 groupItem-view 背景颜色相同。

我无法通过万能的 Google 找到任何相关信息。

最佳答案

以下 NSOutlineView*Keys 由基于 View 的 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:] 传入键作为标识符并传入委托(delegate)作为所有者来创建这些按钮。可以通过以下两种方式提供自定义 NSButtons(或其子类)供 NSOutlineView 使用:

  1. makeViewWithIdentifier:owner: 可以被覆盖,如果标识符是(例如)NSOutlineViewDisclosureButtonKey,则可以配置并返回自定义 NSButton。确保将button.identifier设置为NSOutlineViewDisclosureButtonKey。

  2. 在设计时,可以将一个按钮添加到具有此标识符的大纲 View 中,并且该按钮将被取消存档并根据需要使用。

    使用自定义按钮时,正确设置目标/操作来执行某些操作(可能展开或折叠发送者所在的 rowForView:)非常重要。或者,可以调用 super 来获取默认按钮,并复制其目标/操作来获取正常的默认行为。

    注意:这些键向后兼容 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;
}

关于cocoa - 如何在基于 View 的 NSOutlineView 中自定义 groupItem-look?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28716670/

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