Я создал новый NSOutlineView, который будет показывать некоторые элементы ленты. Проблема в том, что в отношении дочерних элементов ничего не работает. Группа отображается без ошибок, но я не могу показать дочерний элемент.
Вот минимальный воспроизводимый пример:
class SideBarViewController : NSViewController
{
@IBOutlet weak var outlineView: NSOutlineView!
private var feeds: [Feed] = []
override func viewDidLoad()
{
super.viewDidLoad()
self.initSideBar()
}
// MARK: - Helper
fileprivate func initSideBar()
{
let feed = Feed(name: "Test")
let item = FeedItem()
item.title = "item"
feed.children.append(item)
self.feeds.append(feed)
self.outlineView.reloadData()
}
}
extension SideBarViewController : NSOutlineViewDataSource
{
func outlineView(_ outlineView: NSOutlineView, numberOfChildrenOfItem item: Any?) -> Int {
//1
if let feed = item as? Feed {
return feed.children.count
}
//2
return feeds.count
}
func outlineView(_ outlineView: NSOutlineView, child index: Int, ofItem item: Any?) -> Any {
if let feed = item as? Feed {
return feed.children[index]
}
return feeds[index]
}
}
extension SideBarViewController : NSOutlineViewDelegate
{
func outlineView(_ outlineView: NSOutlineView, isItemExpandable item: Any) -> Bool
{
return item is Feed
}
func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView?
{
if let group = item as? Feed
{
if let cell = outlineView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "HeaderCell"), owner: nil) as? NSTableCellView
{
cell.textField?.stringValue = group.name
return cell
}
}
if let item = item as? FeedItem
{
if let cell = outlineView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "DataCell"), owner: nil) as? NSTableCellView
{
cell.textField?.stringValue = item.title
return cell
}
}
return nil
}
func outlineView(_ outlineView: NSOutlineView, shouldSelectItem item: Any) -> Bool
{
return item is FeedItem
}
func outlineView(_ outlineView: NSOutlineView, heightOfRowByItem item: Any) -> CGFloat
{
return item is Feed ? 24.0 : 32.0
}
func outlineView(_ outlineView: NSOutlineView, shouldShowOutlineCellForItem item: Any) -> Bool
{
return false
}
}
class Feed: NSObject {
let name: String
var children = [FeedItem]()
init(name: String) {
self.name = name
}
}
class FeedItem: NSObject
{
var url: String = ""
var title: String = ""
var publishingDate: Date = Date.current
}
Я использую MacOS Big Sur beta 3 . Что мне не хватает?
Дочерний элемент не отображается