Cocoa 如何在NSOutlineView中展开/折叠组行后强制重画组行
我尝试调用setNeedsDysplay:和setNeedsDisplayInRect:但traffackgroundinrect:和drawsepositionornrect:不是为组行调用的,而是为其他所有行调用的 这是我的一段代码:Cocoa 如何在NSOutlineView中展开/折叠组行后强制重画组行,cocoa,nsoutlineview,Cocoa,Nsoutlineview,我尝试调用setNeedsDysplay:和setNeedsDisplayInRect:但traffackgroundinrect:和drawsepositionornrect:不是为组行调用的,而是为其他所有行调用的 这是我的一段代码: - (void)outlineView:(NSOutlineView *)outlineView didAddRowView:(NSTableRowView *)rowView forRow:(NSInteger)row { id prevItem =
- (void)outlineView:(NSOutlineView *)outlineView didAddRowView:(NSTableRowView *)rowView forRow:(NSInteger)row {
id prevItem = [outlineView itemAtRow:row - 1];
if ([self outlineView:outlineView isGroupItem:prevItem]) {
id view = [self outlineView:outlineView rowViewForItem:prevItem];
if (view) {
[view setNeedsDisplay:YES];
}
}
}
编辑
这就是我想到的:
- (void)outlineView:(NSOutlineView *)outlineView didRemoveRowView:(NSTableRowView *)rowView forRow:(NSInteger)row {
// TODO: find a be a better way to repaint a node after it's been collapsed
for (NSView *view in outlineView.subviews) {
NSInteger testRow = [outlineView rowForView:view];
if (testRow == row - 1) {
id item = [outlineView itemAtRow:testRow];
if ([(id)outlineView outlineView:outlineView isGroupItem:item]) {
[view setNeedsDisplay:YES];
}
}
}
}
- (void)outlineView:(NSOutlineView *)outlineView didAddRowView:(NSTableRowView *)rowView forRow:(NSInteger)row {
// TODO: find a be a better way to repaint a node after it's been expanded
for (NSView *view in outlineView.subviews) {
NSInteger testRow = [outlineView rowForView:view];
if (testRow == row - 1) {
id item = [outlineView itemAtRow:testRow];
if ([(id)outlineView outlineView:outlineView isGroupItem:item]) {
[view setNeedsDisplay:YES];
}
}
}
}
…但在某些情况下速度太慢了好的,这就成功了:
- (void)outlineViewItemDidCollapse:(NSNotification *)notification {
NSInteger row = [_outlineView rowForItem:notification.userInfo[@"NSObject"]];
NSView *rowView = [_outlineView rowViewAtRow:row makeIfNecessary:NO];
[rowView setNeedsDisplay:YES];
}
- (void)outlineViewItemDidExpand:(NSNotification *)notification {
NSInteger row = [_outlineView rowForItem:notification.userInfo[@"NSObject"]];
NSView *rowView = [_outlineView rowViewAtRow:row makeIfNecessary:NO];
[rowView setNeedsDisplay:YES];
}