Реализация проверенного элемента
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