Реализация проверенного элемента
NSValidatedUserInterfaceItem
используется стандартным механизмом проверки пользовательского интерфейса Набора Приложения и должен быть реализован проверенными объектами.
Проверенные объекты отправляют validateUserInterfaceItem:
к блокам проверки допустимости, которые могут быть определены NSApplication
targetForAction:to:from:
.
Можно расширить эту функциональность путем представления нового набора пар протокола, предназначенного к определенным проверенным объектам. NSMenuItem
протокол является одним примером, расширяющим это машинное оборудование проверки, чтобы позволить блокам проверки допустимости изменять проверяемые пункты меню. Можно расширить проверку UI:
Объявите протокол, наследовавшийся от
NSValidatedUserInterfaceItem
.Можно добавить как много функций, которые Вы хотите для своих проверенных объектов в этом протоколе, например:
@protocol NSValidatedToolbarItem <NSValidatedUserInterfaceItem>
- (NSImage *)image;
- (void)setImage:(NSImage *)theImage
- (NSString *)toolTip;
- (void)setToolTip:(NSString *)theToolTip;
@end
Объявите метод проверки для блоков проверки допустимости.
Необходимо объявить новый селектор, берущий объекты в качестве параметра, например:
@protocol NSToolbarItemValidations
- (BOOL)validateToolbarItem:(id <NSValidatedToolbarItem>)theItem;
@end
Реализуйте Ваш
update
метод.Необходимо, во-первых, проверить, реагирует ли текущий блок проверки допустимости метод проверки, то, обобщение
validateUserInterfaceItem:
. Таким образом, Ваш объект может быть автоматически позволен/отключен стандартными объектами Набора Приложения какNSTextView
без любого дополнительного кодирования, например:- (void)update {
id validator = [NSApp targetForAction:[self action] to:[self target] from:self];
if ((validator == nil) || ![validator respondsToSelector:[self action]])
{
[self setEnabled:NO];
}
else if ([validator respondsToSelector:@selector(validateToolbarItem:)])
{
[self setEnabled:[validator validateToolbarItem:self]];
}
else if ([validator respondsToSelector:@selector(validateUserInterfaceItem:)])
{
[self setEnabled:[validator validateUserInterfaceItem:self]];
}
else
{
[self setEnabled:YES];
}
}
Дополнительно, реализуйте методы категории для стандартных объектов.
Теперь можно реализовать методы проверки по умолчанию для стандартных объектов как
NSTextView
илиNSDocument
, например:@implementation NSTextView (NSToolbarValidation)
- (BOOL)validateToolbarItem:(id <NSValidatedToolbarItem>)theItem
{
BOOL returnValue = [self validateUserInterfaceItem:theItem];
// Your own validation
return returnValue;
}
@end