Проверка NSToolbarItem с представлением против FirstResponder - PullRequest
1 голос
/ 16 июля 2010

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

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

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

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

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

1 Ответ

0 голосов
/ 22 июля 2010

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

...