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