Реализация проверенного элемента

NSValidatedUserInterfaceItem используется стандартным механизмом проверки пользовательского интерфейса Набора Приложения и должен быть реализован проверенными объектами.

Проверенные объекты отправляют validateUserInterfaceItem: к блокам проверки допустимости, которые могут быть определены NSApplication targetForAction:to:from:.

Можно расширить эту функциональность путем представления нового набора пар протокола, предназначенного к определенным проверенным объектам. NSMenuItem протокол является одним примером, расширяющим это машинное оборудование проверки, чтобы позволить блокам проверки допустимости изменять проверяемые пункты меню. Можно расширить проверку UI:

  1. Объявите протокол, наследовавшийся от NSValidatedUserInterfaceItem.

    Можно добавить как много функций, которые Вы хотите для своих проверенных объектов в этом протоколе, например:

    @protocol NSValidatedToolbarItem <NSValidatedUserInterfaceItem>
    - (NSImage *)image;
    - (void)setImage:(NSImage *)theImage
    - (NSString *)toolTip;
    - (void)setToolTip:(NSString *)theToolTip;
    @end
  2. Объявите метод проверки для блоков проверки допустимости.

    Необходимо объявить новый селектор, берущий объекты в качестве параметра, например:

    @protocol NSToolbarItemValidations
    - (BOOL)validateToolbarItem:(id <NSValidatedToolbarItem>)theItem;
    @end
  3. Реализуйте Ваш 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];
        }
    }
  4. Дополнительно, реализуйте методы категории для стандартных объектов.

    Теперь можно реализовать методы проверки по умолчанию для стандартных объектов как NSTextView или NSDocument, например:

    @implementation NSTextView (NSToolbarValidation)
     
    - (BOOL)validateToolbarItem:(id <NSValidatedToolbarItem>)theItem
    {
        BOOL returnValue = [self validateUserInterfaceItem:theItem];
         // Your own validation
         return returnValue;
    }
    @end