1

UIAlertView在代码中被广泛使用。

我想在显示之前检查所有警报视图消息。

我已经写了一个类别中的方法UIAlertView

问题:

  • 有没有办法在一个地方解决这个问题,并且所有的警报视图都会在显示它之前自动调用它。(示例 - 就像覆盖某些方法)

注意 - 我已经有一个方法,但我不想在所有地方手动更改代码,而是我正在寻找一个时尚的解决方案,如果可能的话,我可以在一个地方进行更改(比如覆盖一个方法)

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 回答