2015-06-02 3 views
2

Мне нужно увидеть touchInside свойства UIControl, но так как он не может работать с помощью KVO. Кто может сказать мне, как решить эту проблему?Как наблюдать за прикосновением свойств UIControl?

#define SB_NORMAL_BORDER_COLOR [UIColor colorWithWhite:0.751 alpha:1.000].CGColor 
#define SB_TOUCH_BORDER_COLOR [UIColor colorWithRed:0.077 green:0.627 blue:1.000 alpha:1.000].CGColor 
#define SB_OBSERVER_KEYPATH @"touchInside" 

- (instancetype)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     self.layer.borderWidth=1.0f; 
     self.layer.borderColor=SB_NORMAL_BORDER_COLOR; 
     self.backgroundColor = [UIColor colorWithRed:0.881 green:0.901 blue:0.810 alpha:1.000]; 
     self.layer.cornerRadius=self.bounds.size.width/2; 

     [self addObserver:self forKeyPath:SB_OBSERVER_KEYPATH options:NSKeyValueObservingOptionNew context:nil]; 

    } 
    return self; 
} 

Этот класс является подклассом UIControl.

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ 

    NSLog(@"Observer"); 
    if(![keyPath isEqualToString:SB_OBSERVER_KEYPATH]) return; 

    BOOL isTouch=[change[@"new"] boolValue]; 

    if(isTouch){ 
     self.layer.borderColor=SB_TOUCH_BORDER_COLOR; 
     [self sendActionsForControlEvents:UIControlEventTouchUpInside]; 
    }else{ 
     self.layer.borderColor=SB_NORMAL_BORDER_COLOR; 
    } 
} 
+0

[Это] (http://stackoverflow.com/questions/1288978/how-to-implement-target-action-mechanism-for-custom -control), вероятно, поможет вам – Jasper

+0

Я хочу знать, почему не удается увидеть свойства touchInside? – Docee

ответ

0

Вам нужно добавить целевое действие

- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents; 

И обрабатывать код там.

Затем отправить действие дальше в этом методе:

[self sendActionsForControlEvents:UIControlEventValueChanged]; 
Смежные вопросы