2016-09-06 17 views
0

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

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

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

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

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

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

Link to project file in Xcode

My Storyboard

+1

В этом случае я бы использовать СИБ файлы для представлений детей и загружать их с' loadNibNamed: Владелец: topLevelObjects : 'Еще одно предложение - это контроллер представления табуляции, который очень хорошо работает в раскадровке - однако кнопки будут на вершине. – vadian

ответ

0

Я создаю это с textlable, но одно и то же.

  1. Создать "@IBOutlet weak var labelListInvoices: NSTextField!"
  2. Создать действие "@IBAction Func onListInvoices (_ отправитель: AnyObject) { пусть акт = InvoicesList (nibName: "": (! Действовать), расслоение ноля app.show InvoicesList)"
  3. Создать вар «вар приложение = NSApp.delegate, как AppDelegate "
  4. Теперь переходим к AppDelegate и создать этот Func " // APP ДИРЕКТОР

    // Использование: // пусть акт = MainView (nibName: "MainView", расслоение : nil) // app.show (act!) func show (_ newController: ControllerType, с сообщением: Параметр Ослабляет? = Ноль) { пусть NewView = newController.view

    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) 
         } 
        } 
    } 
    

    } "

 Смежные вопросы

  • Нет связанных вопросов^_^