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 대리자 메서드에 대한 기본 구현 (A UIAlertView 범주에 willPresentAlertView 정의) 다음 접근 방식을 제공하는 경우 올바른 것입니다. 당신은 메서드가 호출되도록 대리인으로 경고 자체를 전달해야 : 당신이하지 않으면, 당신의 대리자 메서드는

UIAlertView* alert = ... 
alert.delegate = 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];과 같이 설정됩니다. 행운을 빕니다.

관련 문제