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
を呼びたくないため)。
方法swizzlingを見て:http://nshipster.com/method-swizzling/。私はそれがあなたが必要とするものだと思います。 (私はあなたが必要な動作を達成するためにUIViewクラスのbeginTouchメソッドをswizzleできると思う)。 –
@AndrewRomanov私はSwiftを使用し、swizzlingメソッドを使用してライブラリを開発しています。しかし、アプリケーションでは、メソッドスウィズルを開始するためにsuperの実装を呼び出す必要があります。これを行うための良い方法はありますか? – Sac
スーパークラスを呼びたくない場合は、クラス内のスウィズルメソッドはどうですか?たとえば、メソッドsubscribeToTouchesForClass(ClassVarVar)を作成し、クラスをclassVarとして設定することができます。 –