В моем приложении Cocoa в меню приложения есть пункт меню «Удалить», который отправляет сообщение delete:
первому ответчику. Теперь у меня есть фокус клавиатуры на NSOutlineView
, который является первым ответчиком в этом случае. За исключением подкласса NSOutlineView
, есть ли способ обработать сообщение delete:
, переданное ему? Ни NSOutlineViewDelegate
, ни протокол NSOutlineViewDataSource
, по-видимому, не определяют ничего интересного для обработки этих действий.Есть ли такая вещь, как делегат NSResponder?
ответ
Первый ответчик в точности такой: первый ответчик. Он пересылает все, что не интересует его , следующего ответчика, и может пересылать его по очереди и так далее, пока сообщение не достигнет объекта приложения.
Итак, все, что вам нужно сделать, чтобы справиться с этим сообщением, находится в цепочке ответчиков. Контроллер окна - хороший способ сделать это; это будет следующий ответчик окна.
С точки зрения архитектуры, не кажется ли бесполезным, чтобы обработчики окон обрабатывали события «копировать», «вставлять» и «удалять», которые являются локальными для представления таблицы/контура? Кажется, что эти методы лучше всего обрабатываются либо контроллером массива/дерева, с которым привязывается представление, либо делегатом представления, но NSArrayController и NSTreeController не являются NSR-ответчиками и не могут находиться внутри цепочки ответчиков, какие-либо предложения? – Tony
Вы всегда можете использовать пользовательские объекты NSViewController для управления каждым из ваших индивидуальных представлений и вставки контроллеров представления в цепочку ответчиков. Контроллеры представлений могут обрабатывать копии и вставки и т. Д. –
@Tony: нет, если оконный контроллер является или знает объект, которому принадлежат данные (например, документ). Контроллеры окон в значительной степени существуют для промежуточного между представлениями и окном и контроллерами модели. Было бы лучше, если бы представление обрабатывало вырезание, копирование, вставку и удаление себя (либо через привязку, либо с сообщениями с источниками данных), но если вы не хотите сделать подкласс, который добавляет это, это не так. –
- 1. Есть ли такая вещь, как оператор «= +»?
- 2. Есть ли такая вещь, как XML 2.0?
- 3. Есть ли такая вещь, как диаграмма Jsp?
- 4. Есть ли такая вещь, как корзина couchbase?
- 5. Есть ли такая вещь, как RootController
- 6. Есть ли такая вещь, как javascript-компилятор?
- 7. Есть ли такая вещь, как конструктор const?
- 8. Есть ли такая вещь, как «язык кодирования»?
- 9. Есть ли такая вещь, как интерпретатор C++?
- 10. Есть ли такая вещь, как перезаписываемый VirtualPathProvider?
- 11. Есть ли такая вещь, как JSON Builder?
- 12. Есть ли такая вещь, как оператор ограничения?
- 13. Есть ли такая вещь, как «Безграничный тип»?
- 14. Есть ли такая вещь, как сила?
- 15. Есть ли такая вещь, как Dynamic CSS?
- 16. Есть ли такая вещь, как «временная функция»?
- 17. Есть ли такая вещь, как кешированный grep?
- 18. Есть ли такая вещь, как не менее?
- 19. Есть ли такая вещь, как инициализация метода?
- 20. Есть такая вещь, как мимика?
- 21. Вероятностное хеширование - есть ли такая вещь?
- 22. Cron API: есть ли такая вещь?
- 23. Сброс Исключение, есть ли такая вещь?
- 24. Расширенные обновления, есть ли такая вещь?
- 25. Python Injection - есть ли такая вещь?
- 26. Daemon java process - есть ли такая вещь?
- 27. ИБП Тесты отслеживания (есть ли такая вещь?)
- 28. jQuery selector: this.parent, есть ли такая вещь?
- 29. php - Datastore: TextProperty (есть ли такая вещь?)
- 30. jQuery Sessions, есть ли такая вещь?
Как вы возражаете против подкласса? Это просто и достигнет того, чего вы хотите. –
Это, безусловно, достигает результата, однако обработка этих элементов-клещей, по-видимому, является ролью контроллера вместо представления. Кроме того, поскольку Cocoa активно выступает за шаблон делегата, я подумал, что, возможно, есть какой-то встроенный делегат для решения этих задач. – Tony