2015-11-03 3 views
0

У меня есть NSMenuItem, который включен/отключен в зависимости от того, отвечает ли первый ответчик конкретному селектору.Можно ли условно отключить NSMenuItem, который включен, только когда первый ответчик отвечает на селектор?

Моя проблема в том, что есть условия, в которых я делаю не хочу, чтобы элемент был включен для первого ответчика.

Но я не могу просто условно удалить определение метода во время выполнения, чтобы отключить пункт меню

Для примера того, что я имею в виду:
У меня есть NSDocument -А аппликация, и у меня есть два основные подклассы - a ImageDocument и a VideoDocument

У меня есть NSMenuItem под названием «Захват кадра», который превращает рамку видео в изображение. Но, очевидно, это должно быть отключено на ImageDocument и включено только на VideoDocument.

NSMenuItem включен, если первый респондент отвечает на -captureFrame

VideoDocumentController имеет метод, -captureFrame, поэтому он включен. ImageDocumentController нет, поэтому элемент меню никогда не включается.

Но, есть конкретные VideoDocument с, что я не хочу, чтобы этот пункт меню был включен. Что может быть лучшим способом отключить этот пункт меню для обработки особых случаев?

ответ

2

В вашем классе VideoDocument переопределить метод NSDocumentvalidateUserInterfaceItem:. В качестве альтернативы вы можете переопределить validateUserInterfaceItem: в подклассе NSDocumentController. Обязательно вызовите super, чтобы сохранить встроенные функции этого метода. См. Пример Apple's docs on UI validation.

+0

Ах, ладно, спасибо! Ваш ответ на самом деле немного неактивен, мне пришлось использовать '-validateMenuItem' на контроллере документа, и я также получил исключение, когда я назвал' super', поэтому я этого не делал. И тогда все сработало: D Может быть, вы можете отредактировать свой ответ, прежде чем я укажу правильно? –

+0

Я добавил возможность переопределения в NSDocumentController. Но если это не сработало, вы сделали что-то не так. Документы на NSDocumentController даже говорят, что вы должны называть '[super validateUserInterfaceItem:]' в переопределении. – JWWalker

+0

А я вижу проблему, я сказал «VideoDocumentController», не понимая, что это подразумевает, что у меня есть подкласс «NSDocumentController». Мой «контроллер» в этом случае является подклассом «NSViewController», который отображает «VideoDocument» –