1

UIAlertViewコードで広く使用されています。

表示する前にすべてのアラート ビュー メッセージを確認したいと思います。

のカテゴリでメソッドを作成しましたUIAlertView

質問:

  • これを 1 か所で修正する方法はありますか?それによって、すべてのアラートビューが表示前に自動的に呼び出します。(例 - メソッドのオーバーライドなど)

注 - 私はすでにこのための方法を持っていますが、すべての場所でコードを手動で変更したくありません。代わりに、可能な場合は 1 つの場所で変更するような洗練されたソリューションを探しています (メソッドをオーバーライドするなど)。 )

4

1 に答える 1

1

UIAlertView でカテゴリを作成し、メッセージが存在するかどうかを最初に確認してから表示するメソッドを提供します。

@implementation UIAlertView (OnlyShowIfMessageExists)

- (void)override_show
{
    if(self.message.length)
    {
        [self override_show];
    }
}

これらのメソッドは入れ替わるため、これらのメソッドは表示されず、override_show を呼び出しています。

+(void)load メソッドも同様にカテゴリに実装し、メソッドを show メソッドでスウィズルします。

+(void)load
{
    SEL origSel = @selector(show);
    SEL overrideSel = @selector(override_show);

    Method origMethod = class_getInstanceMethod(UIAlertView.class, origSel);
    Method overrideMethod = class_getInstanceMethod(UIAlertView.class, overrideSel);

    if(class_addMethod(UIAlertView.class, origSel, method_getImplementation(overrideMethod), method_getTypeEncoding(overrideMethod)))
    {
        class_replaceMethod(UIAlertView.class, overrideSel, method_getImplementation(origMethod), method_getTypeEncoding(origMethod));
    }
    else
    {
        method_exchangeImplementations(origMethod, overrideMethod);
    }
}

@end

これで、UIAlertView に表示するすべての呼び出しで、メソッド override_show が使用されます。

http://www.mikeash.com/pyblog/friday-qa-2010-01-29-method-replacement-for-fun-and-profit.html

于 2013-07-29T10:39:19.843 に答える