gpt4 book ai didi

objective-c - 如何在 NSOutlineView 中重新加载自定义 NSTableRowView?

转载 作者:太空狗 更新时间:2023-10-30 03:50:29 25 4
gpt4 key购买 nike

当行展开/折叠时,我正在尝试修改我的 NSOutlineView 中使用的自定义 NSTableRowView 的外观。我的 NSOutlineViewDelegate 包括:

- (NSTableRowView *)outlineView:(NSOutlineView *)outlineView rowViewForItem:(id)item
{
...
return rowView;
}

- (void)itemDidExpand:(NSNotification *)notification
{
NSDictionary *userInfo = [notification userInfo];
id item = [userInfo objectForKey:@"NSObject"];
NSOutlineView *outlineView = [notification object];
[outlineView reloadItem:item];
}

不幸的是,这不会重新加载自定义行 View 。

重新加载整个 NSOutlineView 的数据:

- (void)itemDidExpand:(NSNotification *)notification
{
[outlineView reloadData];
}

但是对于大量数据,这可能会非常耗时,并且通常会导致旋转的沙滩球。

是否可以为单个顶级项目重新加载自定义行 View ?

最佳答案

试试下面的方法:

-(void)outlineView:(NSOutlineView *)outlineView didAddRowView:(NSTableRowView *)rowView forRow:(NSInteger)row {
aColor = [NSColor colorWithCalibratedRed:(r/255.0f) green:(g/255.0f) blue:(b/255.0f) alpha:1.0];
[view setBackgroundColor:aColor];
}

您可以进一步推进此操作以获取行对象,然后确定特定行所需的颜色。

-编辑-

如果您希望更改父单元格 View 以显示它已展开,那么您为 NSOutlineview 实现了错误的方法。实现如下方法:

-(void)outlineViewItemWillExpand:(NSNotification *)notification {
id theObject = [[notification userInfo] objectForKey:@"NSObject"];

NSInteger row = [theOutlineView rowForItem:theObject];
NSTableRowView *theRowView = [theOutlineView rowViewAtRow:row makeIfNecessary:NO];

int r = 110;
int g = 110;
int b = 110;

NSColor *aColor = [NSColor colorWithCalibratedRed:(r/255.0f) green:(g/255.0f) blue:(b/255.0f) alpha:1.0];
[theRowView setBackgroundColor:aColor];
}

关于objective-c - 如何在 NSOutlineView 中重新加载自定义 NSTableRowView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19739290/

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