UIControl: sendActionsForControlEvents omits UIEvent

后端 未结 2 1818
有刺的猬
有刺的猬 2020-12-18 07:28

I want to implement a custom subclass of UIControl. It works beautifully except for one fatal problem that is making me spit teeth. Whenever I use sendActionsForControlEvent

相关标签:
2条回答
  • 2020-12-18 08:17

    I have ONE possible solution at the moment, but I'm not very happy about it. For others faced with the same problem though, here it is. First, declare a local variable or property for a UIEvent thus:

    @property (nonatomic, assign) UIEvent * currentEvent;
    

    Now, in your touch-handling routines, set that local variable to the current UIEvent for that routine before calling [self sendActionsForControlEvents:] like so, replacing UIControlEventTouchDown with whichever action you want to send out of course.

    self.currentEvent = event;
    [self sendActionsForControlEvents: UIControlEventTouchDown];
    

    Finally, override the following method thus:

    - (void) sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event
    {
        [super sendAction:action to:target forEvent:self.currentEvent];
    }
    

    This works, but I am not in the least bit fond of it, so if anybody has an alternative solution that doesn't rely on holding a weak reference to a UIEvent, I will be overjoyed to hear it!

    0 讨论(0)
  • 2020-12-18 08:27

    I would assume that this is because the sendActionsForControlEvents: method can't know which UIEvent (if any) your control event should be associated with.

    You could try to send all the actions separately (replicating what the sendActionsForControlEvents: method does, according to the documentation), so you can specifically associate them with a UIEvent:

    UIEvent *event = ...;
    UIControlEvents controlEvent = ...;
    
    for (id target in [self allTargets]) {
        NSArray *actions = [self actionsForTarget:target forControlEvent:controlEvent];
        for (NSString *action in actions) {
            [self sendAction:NSSelectorFromString(action) to:target forEvent:event];
        }
    }
    
    0 讨论(0)
提交回复
热议问题