0

我已经为委托方法创建了类别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
4

2 回答 2

3

willPresentAlertView如果您的意图是为委托方法提供默认实现,那么您的方法(willPresentAlertViewUIAlertView类别中定义)是正确的。您只需要将警报本身作为委托传递,以便调用该方法:

 UIAlertView* alert = ...
 alert.delegate = alert;

如果你不这样做,你的委托方法将不会被调用。

另一方面,我怀疑定义这样的默认实现是否真的很有用,因为原则上每个警报都需要自己特定的委托方法。

于 2012-10-09T10:38:08.433 回答
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];这是朝着正确方向迈出的一步,但可以采取更多步骤。祝你好运。

于 2012-10-09T10:38:39.437 回答