Переключение с одного NSViewController на другой в Swift Storyboards для Mac

У меня есть проблема, которую я пытаюсь решить уже довольно давно. Также предоставляется файл проекта.

Итак, у меня есть следующая идея: иметь боковую панель с кнопками, и при нажатии кнопок она переключает только правый боковой контент.

Я изначально создал проект, который имеет только 1 раскадровку. Window запускает первый ViewController с кнопками и пользовательским представлением.

Что мне нужно, так это то, что при нажатии одной из кнопок пользовательское представление заменяется содержимым другого ViewController. Просто представление, а не весь предыдущий контроллер представления, замененный другим.

Как я могу это сделать? Переходы? Слои? Пожалуйста, отчаянно нуждайтесь в помощи, так как я не могу понять раскадровки, но хочу много с ними работать. Это поможет мне начать.

Я подумал еще об одном варианте: если бы я использовал разделенный просмотр, было бы лучше? Тогда я мог бы, вероятно, заменить сонтроллер правого бокового обзора на другой, верно?

Ссылка на файл проекта в Xcode

Моя раскадровка


person Dmitri K.    schedule 06.09.2016    source источник
comment
В этом случае я бы использовал nib-файлы для дочерних представлений и загрузил их с помощью loadNibNamed:owner:topLevelObjects: Еще одно предложение — контроллер представления вкладок, который очень хорошо работает в раскадровке, однако кнопки будут сверху.   -  person vadian    schedule 06.09.2016


Ответы (2)


Я создаю это с помощью textlable, но это то же самое.

  1. Создайте "@IBOutlet weak var labelListInvoices: NSTextField!"
  2. Создать действие "@IBAction func onListInvoices(_ sender: AnyObject) { let act = InvoicesList(nibName: "InvoicesList", bundle: nil) app.show(act!)"
  3. Создайте var "var app = NSApp.delegate as! AppDelegate"
  4. Теперь перейдите в appdelegate и создайте эту функцию "// APP DIRECTOR

    // Использование: // let act = MainView(nibName: "MainView", bundle: nil) // app.show(act!) func show(_ newController: ControllerType, with message: Parameters? = nil) { let newView = новыйконтроллер.представление

    if let frame = NSApp.mainWindow?.contentView?.frame {
        newView.frame = frame                           // Resize the view to the window instead
    }
    
    guard let main = NSApp.mainWindow?.contentViewController else { return }
    
    if main.childViewControllers.count < 1 {            // if no controllers, then it's main controller
        main.addChildViewController(newController)                // add new controller
        main.view.addSubview(newView)                   // add new view to main view
        if message != nil {
            newController.notify(message)
        }
    } else {
        let current = main.childViewControllers.last    // get lasr controller as current before adding new
        main.addChildViewController(newController)                // add new controller
        main.transition(from: current!, to: newController, options: [.crossfade]){
            if message != nil {
                newController.notify(message)
            }
        }
    }
    

    } "

person bob    schedule 05.04.2017

Вы можете попробовать использовать NSTabView и вставлять объекты NSTabViewItem столько, сколько вам нужно. Каждый NSTabView может быть инициирован с помощью пользовательского NSViewController. Чтобы скрыть кнопки вкладок по умолчанию, вы можете установить для типа границы NSTabView значение None. Вкладки можно переключать программно с помощью selectTabViewItem().

person Арслан Атаев    schedule 16.10.2018