Проверка NSToolbarItem с представлением против FirstResponder
У меня есть элемент панели инструментов, который содержит представление (NSButton
) и целью представления является nil
, поэтому он будет искать цепочку респондента при запуске действия. У меня проблемы с тем, как проверить, как работает первый респондент.
Я подкласс NSToolbarItem и реализовал -(void)validate
, Ссылки, которые я нашел, говорят, что вы должны быть в состоянии получить первого респондента, позвонив [[[self view] window] firstResponder]
затем, видя, реализует ли цепочка респондента NSToolbarItemValidation
или же NSUserInterfaceValidations
и вызов соответствующего метода проверки.
Тем не менее, когда я звоню [[self view] window]
Я возвращаюсь nil
как окно, поэтому я не могу получить первый респондент.
Я не уверен, если это имеет значение, но я создаю панель инструментов в XIB вместо того, чтобы писать это в коде.
Глядя в NSToolbar.h, есть ivar, который ссылается на содержащее окно, поэтому я мог найти первого респондента, вызвав [[[self toolbar] valueForKey:@"window"] firstResponder]
, но это немного хак, и я бы предпочел использовать что-то документированное / более стабильное.
1 ответ
Вы не подтверждаете вручную. Приложение вызывает -validate (или его соответствующий вариант) для каждого объекта в цепочке респондента, для каждого элемента меню или элемента панели инструментов, который требует проверки, до тех пор, пока не найдет тот, который возвращает YES (что означает, что он поддерживает действие каждого элемента меню или панели инструментов).), или не находит. Если он найден, ваш элемент панели инструментов или пункт меню включен. Если нет, он отключен. По крайней мере, это общая теория.