UIAlertView
在代码中被广泛使用。
我想在显示之前检查所有警报视图消息。
我已经写了一个类别中的方法UIAlertView
。
问题:
- 有没有办法在一个地方解决这个问题,并且所有的警报视图都会在显示它之前自动调用它。(示例 - 就像覆盖某些方法)
注意 - 我已经有一个方法,但我不想在所有地方手动更改代码,而是我正在寻找一个时尚的解决方案,如果可能的话,我可以在一个地方进行更改(比如覆盖一个方法)
UIAlertView
在代码中被广泛使用。
我想在显示之前检查所有警报视图消息。
我已经写了一个类别中的方法UIAlertView
。
问题:
注意 - 我已经有一个方法,但我不想在所有地方手动更改代码,而是我正在寻找一个时尚的解决方案,如果可能的话,我可以在一个地方进行更改(比如覆盖一个方法)
在 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