какао - визуальное редактирование/дизайн NSView

Как я могу визуально спроектировать NSView в Xcode? Я пытаюсь создать приложение statusBar только с statusMenu

Пользовательский вид меню

Как вы можете видеть выше, объект появляется, но я не могу редактировать его визуально, в результате он выглядит так:

Результат только с использованием раскадровки

Я попытался использовать файл XIB (есть только NSView, без ViewController), но я не могу поместить NSView в XIB в AppDelegate. Я попробовал другие способы и смог использовать файл XIB, но тогда я не могу использовать раскадровку.

У вас есть идеи для этой ситуации?

ОБНОВИТЬ

Спасибо Макс за ответ на мой вопрос. Я действительно пробовал это раньше, но потерпел неудачу. Я попробовал еще раз после вашего комментария, и все еще не повезло. Вот как я это сделал Tried

Я создал ViewController, затем изменил его представление на MenuCustomView (NSView). Это код в AppDelegate.

    let statusBar = NSStatusBar.systemStatusBar().statusItemWithLength(-1)
var menuCustomView = NSView()

func applicationDidFinishLaunching(aNotification: NSNotification) {
    // Insert code here to initialize your application
    let statusIcon = NSImage(named: "statusIcon")
    let statusMenu = NSMenu()
    statusBar.image = statusIcon
    statusBar.menu = statusMenu

    let menuItem = NSMenuItem()
    menuItem.title = "title"
    var vc = ViewController()
    menuCustomView = vc.view
    menuItem.view = menuCustomView
    statusMenu.addItem(menuItem)

}

Файлы у меня есть в проекте

Файлы, которые у меня есть


person BlueS    schedule 01.06.2015    source источник
comment
Если у вас есть только одно представление, зачем вам раскадровка?   -  person mangerlahn    schedule 01.06.2015
comment
У меня могут быть другие в дальнейшем развитии, я не хочу быть ограниченным. И я предпочитаю раскадровку, она аккуратная. Так что, если есть какой-то способ использовать Storyboard в качестве основного инструмента проектирования интерфейса, это было бы лучше.   -  person BlueS    schedule 01.06.2015
comment
Хорошо, я опубликую ответ   -  person mangerlahn    schedule 01.06.2015


Ответы (1)


Даже если вам не нужен контроллер представления, вы можете использовать его для разработки представлений. Создайте его в раскадровке, отредактируйте вид так, как хотите.

Затем вы можете использовать представление, создав viewController из раскадровки и используя его свойство представления, чтобы прикрепить представление к NSStatusBarItem

Мои слова в коде:

    let storyboard = NSStoryboard(name: "Main", bundle: nil)
    let viewController = storyboard?.instantiateControllerWithIdentifier("MyViewController") as! NSViewController
    let view = viewController.view

Я предполагаю, что вы хотите добавить в представление работающий код. Чтобы, например, реагировать на нажатие кнопки, вы должны создать подкласс NSViewController, а затем реализовать код, который вы бы добавили в AppDelegate.

Если вам нужны дополнительные объяснения, не стесняйтесь, пишите мне :)

person mangerlahn    schedule 01.06.2015
comment
Я обновил вопрос после того, как попробовал (снова) вашу идею. До сих пор не работает. Пожалуйста, помогите мне больше. Спасибо большое - person BlueS; 01.06.2015
comment
Отредактировал мой ответ, надеюсь, я смогу вам помочь! - person mangerlahn; 01.06.2015
comment
Это сработало. Большое спасибо, Макс! Единственное, что осталось, это то, что я не понимаю, почему я могу просто создать экземпляр контроллера, создав новый экземпляр if с помощью let vc = ViewController()? - person BlueS; 01.06.2015
comment
Вы можете ответить на мой вопрос выше? В чем разница? - person BlueS; 01.06.2015
comment
Конечно! Создание пустого viewController с помощью ViewController() не будет содержать представление, которое вы настроили в IB, потому что оно не имеет отношения к созданному. Чтобы получить доступ к этому представлению, вы должны загрузить viewController из раскадровки. - person mangerlahn; 01.06.2015
comment
Давайте продолжим обсуждение в чате. - person BlueS; 01.06.2015