我已为UIAlertView
创建了类别,并覆盖了委托方法willPresentAlertView
,但该类别中的方法未被触发。
示例代码:
@interface UIAlertView (CustomAlert)
@end
@implementation UIAlertView (CustomAlert)
- (void)willPresentAlertView:(UIAlertView *)alertView1
{
for (UIView *sub in [alertView1 subviews])
{
if([sub class] == [UIImageView class])
{
((UIImageView *)sub).image=nil;
((UIImageView *)sub).backgroundColor = [UIColor blackColor];
}
}
[alertView1.layer setBorderColor:[[UIColor whiteColor] CGColor]];
[alertView1.layer setCornerRadius:0];
[alertView1.layer setBorderWidth:2];
}
@end
答案 0 :(得分:3)
如果您的意图是为willPresentAlertView
委托方法提供默认实施,那么您的方法(在willPresentAlertView
类别中定义UIAlertView
)是正确的。您只需将警报本身作为委托传递,以便调用该方法:
UIAlertView* alert = ...
alert.delegate = alert;
如果不这样做,则不会调用您的委托方法。
另一方面,我怀疑定义这样的默认实现确实很有用,因为原则上每个警报都需要自己特定的委托方法。
答案 1 :(得分:1)
简单:
@interface MONBlackStyle : NSObject // << new class, not category
+ (void)willPresentAlertView:(UIAlertView *)alertView1;
@end
@interface MONOrangeStyle : NSObject // << new class, not category
+ (void)willPresentAlertView:(UIAlertView *)alertView1;
@end
不需要任何类别。当然,当您在UIAlertView
上使用该类别时,警报参数是多余的,当然,如果访问是问题,上述消息的定义可以调用其他类别方法。还要注意,在这个确切的示例中,委托将被设置为:alert.delegate = [MONOrangeStyle class];
这是朝着正确方向迈出的一步,但可以采取更多步骤。祝你好运。