Macos 大Sur大纲视图可扩展项已损坏
我启动了一个新的macOS项目(目前在Big Sur beta 3上),而Macos 大Sur大纲视图可扩展项已损坏,macos,appkit,nsoutlineview,macos-big-sur,Macos,Appkit,Nsoutlineview,Macos Big Sur,我启动了一个新的macOS项目(目前在Big Sur beta 3上),而NSOutlineView节点似乎已损坏。不知道这是我还是操作系统 这说明了问题所在。还有一个图像 如您所见,单元与展开V形重叠。单击任一V形可将第一行恢复为正确的布局,但不会将第二行恢复为正确的布局。此外,永远不会调用自动保存方法persistentObjectForItem和itemForPersistentObject 测试项目非常简单——我所做的只是将视图库中的SourceView组件添加到默认的应用程序项目中,
NSOutlineView
节点似乎已损坏。不知道这是我还是操作系统
这说明了问题所在。还有一个图像
如您所见,单元与展开V形重叠。单击任一V形可将第一行恢复为正确的布局,但不会将第二行恢复为正确的布局。此外,永远不会调用自动保存方法persistentObjectForItem
和itemForPersistentObject
测试项目非常简单——我所做的只是将视图库中的SourceView
组件添加到默认的应用程序项目中,并将委托/数据源连接到视图控制器。还选中了IB中的自动保存扩展项
,并在自动保存
字段中输入一个名称。以下是控制器代码的全部内容:
类ViewController:NSViewController{
@IBVar outlineView:NSOutlineView?
让数据=[节点(“第一项”,1),节点(“第二项”,2)]
}
扩展视图控制器:NSOutlineViewDataSource{
func outlineView(outlineView:NSOutlineView,子索引:Int,of item项:Any?)->Any{
数据[索引]
}
func大纲视图(outlineView:NSOutlineView,isItemExpandable item:Any)->Bool{
真的
}
func outlineView(outlineView:NSOutlineView,numberOfChildrenOfItem:Any?)->Int{
item==nil?数据。计数:0
}
func outlineView(outlineView:NSOutlineView,tableColumn:NSTableColumn?的objectValueFor,byItem item:Any?)->Any{
项目
}
func outlineView(outlineView:NSOutlineView,PersistentObject for item item:Any?->Any{
(项目作为?节点)?.id
}
func outlineView(outlineView:NSOutlineView,itemForPersistentObject对象:任意)->任意{
guard let id=对象为?Int else{return nil}
返回data.first{$0.id==id}
}
}
扩展视图控制器:NSOutlineViewDeleteGate{
func outlineView(outlineView:NSOutlineView,viewFor tableColumn:NSTableColumn?,项目:任意)->NSView{
guard let node=项目作为?节点else{
预处理失败(“无效数据项\(项)”)
}
让view=outlineView.makeView(标识符:nodeCellIdentifier,所有者:self)作为?NSTableCellView
查看?.textField?.stringValue=node.name
view?.imageView?.image=NSImage(系统符号名称:node.icon,可访问性说明:nil)
返回视图
}
}
最终类节点{
让id:Int
let name:String
让图标:字符串
init(\uname:String,\uid:Int,\uicon:String=“folder”){
self.id=id
self.name=名称
self.icon=图标
}
}
私有let nodeCelliIdentifier=NSUserInterfaceItemIdentifier(“数据单元”)
有没有其他Mac开发人员可以提供帮助?源代码列表
什么是源列表?它是(它是
)带着特殊的
治疗。Finder屏幕截图:
要创建源列表,只需设置
财产
. 文件说:
NSTableView的源列表样式。在10.5中,浅蓝色渐变用于高亮显示选定行
它到底做什么?跳转到Xcode中的定义并阅读注释(不包括在文档中):
NSTableView的源列表样式。在10.10及更高版本上,模糊选择用于高亮显示行。在此之前,使用了浅蓝色渐变。注意:具有drawsBackground属性的单元格应将其设置为“否”。否则,它们将绘制在NSTableView所做的高亮显示上。设置此样式的副作用是将背景色设置为“源列表”背景色。此外,在NSOutlineView中,将更改以下属性以获得标准的“源列表”外观:indentationPerLevel、rowHeight和intercellSpacing。调用setSelectionHighlightStyle后:可以根据需要更改任何其他属性。在10.11中,如果背景颜色已从“源列表”背景颜色更改为其他颜色,则表格将不再将所选内容绘制为源列表模糊样式,而是进行普通的蓝色高亮显示
由于您在Big Sur,请注意,SelectionHighlightStyle.sourceList
已被弃用。
应该使用
&
样本项目
Xcode:
- 新项目
- macOS和应用程序(故事板和应用程序套件应用程序代表和Swift)
- 主故事板
- 添加源列表控件
- 定位和固定约束
- 将委托和数据源设置为ViewController
- 启用自动保存扩展项
- 将Autosave设置为您想要的任何设置(我有
在那里)FinderLikeSidebar
- 明智地选择,因为扩展状态保存在用户默认值中
在
键下NSOutlineView Items FinderLikeSidebar
- 明智地选择,因为扩展状态保存在用户默认值中
在
- 创建
@IBOutlet var-outlineView:NSOutlineView代码>
- 添加另一个文本表格单元格视图(无图像)
- 将标识符设置为
GroupCell
- 将标识符设置为
- 添加源列表控件
- ViewController.swift
- 下面是注释代码
导入可可粉
//包含组和常规项的示例节点类
类节点{
让id:Int
标题:字符串
让symbolName:字符串?
让子节点:[节点]
让我们分组:Bool
init(id:Int,title:String,symbolName:String?=nil,children:[Node]=[],isGroup:Bool=false){
self.id=id