objective-c - NSOutlineView 子类中内容更改时的通知

标签 objective-c xcode cocoa nstableview nsoutlineview

我想对 NSOutlineView 进行子类化,以便在还没有内容时在其中间显示一个标签。很像 XCode 中的检查器:

enter image description here

显然我不能使用委托(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/

相关文章:

ios - 命令因信号故障而失败 - Swift 2.2 Xcode 7.3

android - child (wySprite,x)已经附加到另一个 parent (wySprite,xx),跳过addChild

macos - NSWindow 的 orderOut/Back/Front 的 sender 参数的目的是什么?

objective-c - Cocoa中窗口的圆角渐变背景

ios - 使用标记符号访问 UILabel

ios - 必须导入 objective-c gettimeofday?

objective-c - 发送通知到山狮通知中心

iOS 14.5 或 14.6 及以上版本访问共享扩展中的 UIApplication.shared.open 或 UIApplication.shared.openURL 会给出 "APPLICATION_EXTENSION_API_ONLY"

svn - 使用 SCM 从 Xcode 中的 SVN 中排除文件/目录

java - OSX Lion ctags Java 支持