2017-07-20 10 views
0

私はCocoa Touch Frameworkまたはダイナミックライブラリを開発しようとしています。iOS Cocoa Touch Frameworkでのユーザーインタラクションの取得

このフレームワークは、ビューのタッチ、スワイプ、パンジェスチャーを傍受する必要があります。私は、すべてのコントロール(UIButton、UIViewなど)でタッチイベントを傍受したいと仮定して、それを後で処理するためにそのデータを使用するフレームワークに取り込む必要があります。

これをどのようにターゲットにするかについて、誰かが正しい方向に向けることができますか?

+0

方法swizzlingを見て:http://nshipster.com/method-swizzling/。私はそれがあなたが必要とするものだと思います。 (私はあなたが必要な動作を達成するためにUIViewクラスのbeginTouchメソッドをswizzleできると思う)。 –

+0

@AndrewRomanov私はSwiftを使用し、swizzlingメソッドを使用してライブラリを開発しています。しかし、アプリケーションでは、メソッドスウィズルを開始するためにsuperの実装を呼び出す必要があります。これを行うための良い方法はありますか? – Sac

+0

スーパークラスを呼びたくない場合は、クラス内のスウィズルメソッドはどうですか?たとえば、メソッドsubscribeToTouchesForClass(ClassVarVar)を作成し、クラスをclassVarとして設定することができます。 –

答えて

0

UIクラスのメソッドを置き換える場合は、基本クラス(UIViewまたはUIViewController)のメソッドを置き換えることができます。あなたのクラスのコードの中にsuperを呼びたくない場合。あなたはどのサブクラスの中でもメソッドを振る舞わせるべきです。
これを達成するには、2つの解決策があります。
1.まず、UIView、UIControl、UIViewControllerのカスタムサブクラスを作成します。これらのサブクラスにはメソッドがあり、superは呼び出さないでください。

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

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

そして、あなたはCustomViewBaseのサブクラスを作成し、任意のメソッドのsuper実装を呼び出します。 (UIView、UIControl、UIViewController、UIButton、UITableViewCellのサブクラスを作成する必要があることを忘れないでください)。
2.基本クラス(UIクラスをUIクラスのサブクラスとして使用する場合)を変更したくない場合は、サブクラス内のメソッドを変更する必要があります(superを呼びたくないため)。

関連する問題