Добавляем свойства в категории Objective-C

Известно, что напрямую нельзя добавлять свойства к категориям. Но мы можем сделать это используя runtime.

В заголовочном файле нашей категории объявим свойство:

@interface UINavigationItem (RevealBarButton)

@property (strong, nonatomic) UIButton *hamburgerButton;

@end

В файле реализации реализуем getter и setter. Не забываем подключить <objc/runtime.h>.

#import <objc/runtime.h>

static void * HamburgerButtonProperyKey = &HamburgerButtonProperyKey;

@implementation UINavigationItem (RevealBarButton)

- (UIButton *)hamburgerButton
{
    return objc_getAssociatedObject(self, HamburgerButtonProperyKey);
}

- (void)setHamburgerButton:(JTHamburgerButton *)hamburgerButton
{
    objc_setAssociatedObject(self,
                             HamburgerButtonProperyKey,
                             hamburgerButton,
                             OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

@end

Теперь можем использовать свойство как обычно.


Опубликовано: Март 30, 2015 ~ obj-c