0

Я создаю приложение, используя Xcode Interface Builder раскадровка.Мое меню, подключенное к моему контроллеру просмотра IBAction серое

Мой VideoViewController реализует следующие действия:

@IBAction func openVideo(sender: AnyObject) { 
    ... 
} 

При подключении моего пункта меню к первой реагирующей, я могу видеть мое действие:

connection

К сожалению, когда Я запускаю свое приложение, пункт меню имеет серый цвет:

enter image description here

Есть идеи?

+0

Вы также подключили OpenVideo к ViewController (например, New Referencing Outlet> ViewController)? –

+0

Как я могу это сделать? –

+0

Вы должны просто контролировать Control-Click на элементе меню Open Video и перетаскивать разъем в свой VideoViewController. Когда вы это сделаете, вы должны увидеть openVideo IBAction, чтобы подключить его. –

ответ

2

Вы должны иметь возможность управления щелчком мыши NSMenuItem и подключить его к вашему VideoViewController. Обычно IBOutlet будет использоваться для того, чтобы подключить ваш IBAction:

class AppDelegate: NSObject, NSApplicationDelegate { 

    @IBOutlet var myMenuItem: NSMenuItem! 

    @IBAction func openItem(sender: AnyObject) { 
     print("success!") 
    } 
} 

enter image description here

В вашем конкретном случае, вы бы управлять кнопкой мыши и перетащить разъем к вашему VideoViewController.

+0

Как я уже упоминал, я использую Storyboard not XIB file –

+0

@MartinDelille: Это тот же процесс, независимо от того, использует ли проект 'xibs',' nibs' и/или 'раскадровки'. Как уже упоминалось (дважды), ваш код нуждается в 'IBOutlet', который, по-видимому, вам не удалось включить. Функция «IBAction» не будет автоматически подключаться к вашему «NSMenuItem» - изображение в моем ответе должно иллюстрировать, как это сделать. Могли ли вы попробовать то, что я предложил? –

+0

другой вопрос: какой инструмент вы использовали для создания этой удивительно прозрачной анимации GIF? :-) –

1

Я знаю, что ОП нашел решение, и хотя я загрузил его проект, я не смог включить (не серый) мой пункт меню.

Вот что работает для меня:

  • Создание в мишени в @IBActionViewController
  • Override func validateMenuItem(_ menuItem: NSMenuItem) -> Bool в мишени ViewController (она должна возвращать true, когда он утверждает, что menuItem действительно menuItem вы готовы подключитесь к вашему @IBAction)
  • Подключитесь MenuItem до First Responder, а затем до @IBAction Вы создали ea rlier

Всё. Хит-бег и выдох.

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