2012-10-09 49 views
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 
+0

爲什麼你想要它在一個類別?什麼目的? –

+0

委託方法從委託對象運行,源對象hav只啓動將以委託對象需要的方式執行的方法。如果你想要額外的功能,你可以把它寫在類別或子類中。如果你想實現委託方法,你可以在委託對象的類中完成。 –

+0

您是否將警報視圖設置爲其自己的代理? – jrturton

回答

3

如果您的目的是提供willPresentAlertView委託方法的默認實現,那麼你的方法(在UIAlertView類別定義willPresentAlertView)是正確的。你只需要通過自身的警報作爲代表,這樣的方法被稱爲:

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

如果你不這樣做,你的委託方法將不會被調用。

另一方面,我懷疑定義這樣的默認實現是非常有用的,因爲原則上每個alert都需要它自己特定的委託方法。

+0

非常感謝,它工作正常 – Spynet

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];這是朝着正確方向邁出的一步,但是可以採取更多步驟。祝你好運。