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