2015-11-27 1 views
0

J'utilise le code suivant pour installer UIPanGestureRecognizer dans mon élément:Comment assigner UIGestureRecognizerDelegate à CKComponentController

MyComponent *c =[super newWithView:{ 
    [UIView class], 
    { 
    { 
     CKComponentGestureAttribute(
     [UIPanGestureRecognizer class], 
     &setupPanRecognizer, 
     @selector(panGesture:context:), 
     {} 
    ) 
    }, 
    { 
     @selector(setUserInteractionEnabled:), @YES 
    } 
    } 
    } 
    component: [MyOtherComponent newOtherComponentWithMode:model context:context]]; 

I processus panGesture:context dans l'objet MyComponentController.

Mon problème est que UIPanGestureRecognizer bloque la vue d'avance du défilement. Afin de résoudre ce problème, je veux utiliser le protocole UIGestureRecognizerDelegate et permettre aux deux reconnaisseurs (scroll view et my pan) de fonctionner simultanément.

Ma question est comment puis-je affecter mon contrôleur de composant en tant que délégué pour UIPanGestureRecognizer? setupPanRecognizer est juste un C function et il n'a pas de référence à l'objet MyComponentController ou même le composant lui-même.

La seule façon que je vois maintenant est d'obtenir la liste des identificateurs de gestes quelque part dans didUpdateComponent méthode dans mon contrôleur, trouver le bon et assigner le délégué là. Est-ce que ComponentKit fournit une solution à cela?

Répondre

1
CKComponentViewAttributeValue CKComponentGestureAttribute(Class gestureRecognizerClass, 
                 CKComponentGestureRecognizerSetupFunction setupFunction, 
                 CKComponentAction action, 
                 CKComponentForwardedSelectors delegateSelectors) 

Vous pouvez trouver l'argument « de delegateSelectors » enfin, vous pouvez essayer de passer dans un vecteur de sélecteurs que vous souhaitez réponse dans le contrôleur.