2014-10-06 5 views
0

Я работаю над приложением Cocoa, которое в конечном итоге будет иметь только 2 элемента в главном меню окна. В эти элементы не входит пункт меню «Изменить». Можно ли добавить все функциональные возможности элемента «Редактировать» в приложение без «Изменить»? Я говорю обо всех копиях, вставках, отменах и т. Д. Я знаю, что это можно сделать, добавив слушателей клавиатуры в оконные контроллеры, но мне интересно, можно ли это сделать любым другим способом?Возможно ли иметь функцию «Изменить» в приложении Cocoa, у которого нет элемента меню «Изменить»?

Причина, по которой я хочу сделать это по-другому, заключается в том, что я все еще хочу использовать эти команды в окне «О программе». В этом окне нет контроллера (который я знаю), к которому можно добавить слушателя. Если у кого есть альтернативные идеи о том, как это сделать, я все уши.

ответ

3

Да. Элементы меню редактирования просто отправляют произвольные «сообщения» в «цепочку ответчиков».

[[NSApplication sharedApplication] sendAction:@selector(copy:) to:nil from:self]; 

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

Из документации:

Если aTarget равна нулю, sharedApplication ищет объект, который может ответить на сообщение, то есть объект, который реализует соответствующий метод anAction. Он начинается с первого ответчика ключевого окна. Если первый ответчик не может ответить, он пробует следующего ответчика первого ответчика и продолжает следовать за следующими ответными связями по цепочке ответчиков. Если ни один из объектов в цепочке ответчиков ключевого окна не может обрабатывать сообщение, sharedApplication пытается отправить сообщение в делегат окна ключа.

Подробнее здесь:

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/EventOverview/EventArchitecture/EventArchitecture.html#//apple_ref/doc/uid/10000060i-CH3-SW2

+0

+1, но каламбур со словом "произвольный". Это на самом деле конкретные сообщения (противоположные произвольным), но, возможно, вы хотели сказать, что они обычные. –

+0

Отлично! Это именно то, что мне нужно. Благодарю. :) – bhawley