2017-07-20 5 views
0

Je suis en train de développer un framework Cocoa Touch ou une bibliothèque dynamique.Obtenir des interactions utilisateur dans iOS Cocoa Touch Framework

Ce cadre doit intercepter les gestes tactiles, de balayage et de panoramique sur les vues. Pour commencer, supposons que je veux intercepter un événement tactile sur chaque contrôle (UIButton, UIView, etc.) et qu'il devrait être capturé dans le cadre où j'utiliserais ces données pour un traitement ultérieur.

Quelqu'un pourrait-il me diriger dans la bonne direction sur la façon de cibler cela?

+0

Regardez une méthode qui fonctionne: http://nshipster.com/method-swizzling/. Je pense que c'est quelque chose dont tu as besoin. (Je pense que vous pouvez faire basculer la méthode beginTouch dans la classe UIView pour obtenir un comportement nécessaire). –

+0

@AndrewRomanov Je développe la bibliothèque en utilisant Swift et en utilisant la méthode swizzling. Mais dans l'application, j'ai besoin d'appeler l'implémentation du super pour lancer la méthode Swizzling. Y a-t-il une meilleure façon de faire cela? – Sac

+0

Qu'en est-il des méthodes swizzle à l'intérieur de vos classes (si vous ne voulez pas appeler super)? Par exemple, vous pouvez créer une méthode: subscribeToTouchesForClass (Class classVar) et définir votre classe comme classVar. –

Répondre

0

Si vous souhaitez remplacer des méthodes dans les classes d'interface utilisateur, vous pouvez remplacer les méthodes dans les classes de base (UIView ou UIViewController). Si vous ne voulez pas appeler super dans un code de vos classes. Vous devriez balayer les méthodes à l'intérieur de votre sous-classe.
Pour ce faire, je vois deux solutions:
1. D'abord, créez une sous-classe personnalisée pour UIView, UIControl, UIViewController. Ces sous-classes doivent avoir des méthodes de swizzled et n'appellent pas super.

@interface CustomViewBase 
@end 
@implementation CustomViewBase 
+ (void)initialize 
{ 
    [SwizleLib swizleMethodsInClass:[self class]]; 
} 

- (BOOL)touchBegin<.....> 
{ 
    return YES; 
} 
@end 

Et vous allez créer des sous-classes CustomViewBase et appeler super mise en œuvre pour toutes les méthodes. (N'oubliez pas que vous devez créer des sous-classes pour UIView, UIControl, UIViewController, UIButton, UITableViewCell).
2.Si vous ne voulez pas modifier une classe de base (vous voulez utiliser UIView comme sous-classe pour vos classes d'interface utilisateur), vous devez inverser les méthodes dans vos sous-classes (puisque vous ne voulez pas appeler super).