mar*_*rux 1 macos nsoutlineview appkit swift
我的 NSOutlineView 有一些组行无法折叠,类似于 Mail.app 无法隐藏“Mailboxes”组。我希望如果委托的shouldCollapseItem方法返回,则显示/隐藏悬停按钮将被禁用false,但情况似乎并非如此。
我尝试使用以下委托手动禁用它:
func outlineView(_ outlineView: NSOutlineView, willDisplayOutlineCell cell: Any, for tableColumn: NSTableColumn?, item: Any) {
if outlineView.delegate?.outlineView?(outlineView, shouldCollapseItem: item) == false {
if let view = outlineView.delegate?.outlineView?(outlineView, viewFor: tableColumn, item: item) {
if let button = view.subviews.first(where: { $0.identifier == NSOutlineView.showHideButtonIdentifier }) {
button.isHidden = true
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为返回的视图只是NSTableCellView将要呈现的视图,并且在调用此委托时它没有超级视图(因此我无法查找同级视图)。
我可以访问委托中的“显示/隐藏”按钮(这是一个未记录的NSOutlineButtonCell实例)makeView(withIdentifier:owner:),但此时我不知道它是否代表可以隐藏的组之一。
必须有一种方法可以做到这一点,因为 Mail.app(和其他应用程序)能够有条件地禁用组的显示/隐藏按钮。
实施
func outlineView(_ outlineView: NSOutlineView, shouldShowOutlineCellForItem item: Any) -> Bool
Run Code Online (Sandbox Code Playgroud)
并返回false要隐藏的单元格
| 归档时间: |
|
| 查看次数: |
764 次 |
| 最近记录: |