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