2010-07-16 2 views
1

У меня есть элемент панели инструментов, который содержит представление (NSButton), и цель цели установлена ​​в nil, поэтому она будет искать цепочку ответчиков при запуске действия. Тем не менее, у меня возникли проблемы с попыткой проверить правильность первого ответчика.Проверка NSToolbarItem с представлением от FirstResponder

Я подклассифицировал NSToolbarItem и внедрил -(void)validate. Найденные мной ссылки говорят, что вы должны иметь возможность получить первого ответчика, вызвав [[[self view] window] firstResponder], а затем посмотрим, реализует ли цепочка ответчиков NSToolbarItemValidation или NSUserInterfaceValidations и вызывает соответствующий метод проверки.

Однако, когда я звоню [[self view] window], я возвращаюсь nil в качестве окна, поэтому я не могу получить первого ответчика.

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

Глядя в NSToolbar.h, есть ivar, который ссылается на содержащее окно, поэтому я мог найти первого ответчика, вызвав [[[self toolbar] valueForKey:@"window"] firstResponder], но это немного взломать, и я предпочел бы использовать что-то документальное/стабильное.

ответ

0

Вы не проверяете вручную. Приложение вызывает -validate (или его соответствующий вариант) для каждого объекта в цепочке ответчиков для каждого элемента меню или элемента панели инструментов, который требует проверки, до тех пор, пока не найдет тот, который возвращает ДА ​​(это означает, что он поддерживает действие каждого элемента меню или панели инструментов), или не находит его. Если он найдет один, элемент панели инструментов или пункт меню будут включены. Если нет, он отключен. По крайней мере, это общая теория.

+0

Для экземпляров NSToolbarItem, содержащих представления, вам необходимо подклассу и предоставить реализацию -validate. Я пытаюсь понять, как написать этот метод, когда цель является первым ответчиком (т. Е. 'Nil'). http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/Toolbars/Tasks/ValidatingTBItems.html#//apple_ref/doc/uid/20000753-BAJGFHDD – Jablair

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