Как добавить меню в виде Header`а к таблице NSTableView (Mac OS) по типу мобильных приложений?

Для добавления меню в виде Header'а к таблице NSTableView на Mac OS, вам понадобится следовать нескольким шагам.

1. Создайте пользовательский класс NSView, который будет представлять ваш меню-хедер. В этом классе вы можете нарисовать и настроить внешний вид вашего меню-хедера в методе drawRect(_:). Например:

class MenuHeaderView: NSView {
    override func drawRect(dirtyRect: NSRect) {
        super.drawRect(dirtyRect)

        // Нарисуйте ваш меню-хедер
        // Настройте внешний вид вашего меню-хедера
        // ...
    }
}

2. В вашем классе NSTableViewDelegate реализуйте метод viewForHeader(inSection section: Int) -> NSView?, чтобы указать, какой вид должен быть использован в качестве заголовка для определенной секции таблицы NSTableView. В этом методе вы должны вернуть экземпляр класса MenuHeaderView, после чего можете настроить его внешний вид, передав нужные параметры:

class ViewController: NSViewController, NSTableViewDelegate {
    func tableView(_ tableView: NSTableView, viewForHeaderInSection section: Int) -> NSView? {
        let headerView = MenuHeaderView(frame: NSRect(x: 0, y: 0, width: tableView.frame.width, height: 50))
        
        // Настройте внешний вид вашего меню-хедера, установив необходимые параметры:
        // ...
        
        return headerView
    }
}

3. Убедитесь, что ваш класс NSTableViewDelegate назначен в качестве делегата вашей таблицы NSTableView. Вы можете сделать это программно или через Interface Builder.

class ViewController: NSViewController, NSTableViewDelegate {
    @IBOutlet weak var tableView: NSTableView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        tableView.delegate = self
    }
    
    // ...
}

Теперь ваша таблица NSTableView будет отображать ваш меню-хедер для указанной секции как часть интерфейса вашего приложения, похоже на мобильные приложения. Вы можете настроить все аспекты вашего меню-хедера, включая внешний вид, размеры и поведение.