我想对 NSOutlineView 进行子类化,以便在还没有内容时在其中间显示一个标签。很像 XCode 中的检查器:
显然我不能使用委托(delegate)方法,因为我将其作为子类实现,并且在使用此类时必须能够将委托(delegate)设置为其他内容。
除了bounds属性的变化之外,我没有发现任何可以观察到的通知,但这不太可靠。
最佳答案
我最终重写了 NSOutlineView
的几个方法来注入(inject)我的代码。这不是一个非常优雅的解决方案,但它确实有效。如果有人有更好的解决方案,请告诉我,我可能会接受您的答案。
- (void)updateEmptyLabelVisibility {
int r = [[self dataSource] outlineView:self numberOfChildrenOfItem:nil];
BOOL hasRows = r > 0;
_emptyLabel.hidden = hasRows;
}
- (void)reloadItem:(id)item {
[super reloadItem:item];
[self updateEmptyLabelVisibility];
}
- (void)reloadData {
[super reloadData];
[self updateEmptyLabelVisibility];
}
- (void)awakeFromNib {
[super awakeFromNib];
[self updateEmptyLabelVisibility];
}
- (void)endUpdates {
[super endUpdates];
[self updateEmptyLabelVisibility];
}
关于objective-c - NSOutlineView 子类中内容更改时的通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11493568/