NSOutlineView не показывает дочерние элементы - PullRequest
0 голосов
/ 03 августа 2020

Я создал новый 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 . Что мне не хватает?

Дочерний элемент не отображается

...