Implementing a Validated Item
NSValidatedUserInterfaceItem
is used by the Application Kit’s standard user interface validation mechanism, and must be implemented by validated objects.
Validated objects send validateUserInterfaceItem:
to validators that can be determined by NSApplication
’s targetForAction:to:from:
.
You can extend this functionality by introducing a new set of protocol pairs that is targeted to your specific validated objects. NSMenuItem
protocol is one example extending this validation machinery to allow validators to modify menu items being validated. You can extend UI validation by:
Declare a protocol that inherits from
NSValidatedUserInterfaceItem
.You can add as many features you want for your validated objects in this protocol, for example:
@protocol NSValidatedToolbarItem <NSValidatedUserInterfaceItem>
- (NSImage *)image;
- (void)setImage:(NSImage *)theImage
- (NSString *)toolTip;
- (void)setToolTip:(NSString *)theToolTip;
@end
Declare validation method for validators.
You should declare the new selector that takes your objects as the argument, for example:
@protocol NSToolbarItemValidations
- (BOOL)validateToolbarItem:(id <NSValidatedToolbarItem>)theItem;
@end
Implement your
update
method.You should, first, check if your current validator responds to your validation method, then, the generic
validateUserInterfaceItem:
. This way, your object can be automatically enabled/disabled by the Application Kit's standard objects likeNSTextView
without any additional coding, for example:- (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];
}
}
Optionally, implement category methods for standard objects .
Now you can implement default validation methods for standard objects like
NSTextView
orNSDocument
, for example:@implementation NSTextView (NSToolbarValidation)
- (BOOL)validateToolbarItem:(id <NSValidatedToolbarItem>)theItem
{
BOOL returnValue = [self validateUserInterfaceItem:theItem];
// Your own validation
return returnValue;
}
@end
Copyright © 2007 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2007-07-10