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デリゲートメソッドのデフォルトの実装を提供することを意図している場合、アプローチ(カテゴリwillPresentAlertViewで定義UIAlertView)は正しいです。メソッドが呼び出されるように、アラート自体をデリゲートとして渡す必要があるだけです。

 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];は正しい方向への1つのステップですが、さらに多くのステップを実行できます。幸運を。

于 2012-10-09T10:38:39.437 に答える