oscarimonbox
2/29/2016 - 8:37 AM

Añadir un delegate custom

Añadir un delegate custom

1) en el .h de la view (ej. LOConfirmAlertView.h)

@class LOConfirmAlertView;

@protocol LOConfirmAlertViewDelegate <NSObject>

- (void)confirmAlertViewFirstButton:(LOConfirmAlertView *)cav;
- (void)confirmAlertViewSecondButton:(LOConfirmAlertView *)cav;
- (void)confirmAlertViewClosed:(LOConfirmAlertView *)cav;

@end


@interface LOConfirmAlertView : UIView
@property (weak, nonatomic) IBOutlet UILabel *lblTitle;
@property (weak, nonatomic) IBOutlet UILabel *lblMesssage;
@property (weak, nonatomic) IBOutlet UIButton *btnFirstButton;
@property (weak, nonatomic) IBOutlet UIButton *btnSecondButton;
@property (weak, nonatomic) IBOutlet UIImageView *btnCloseButton;

@property (weak) id<LOConfirmAlertViewDelegate> delegate;

- (instancetype)initWithFrame:(CGRect)frame
                   withTitle :(NSString*) title
                      andText:(NSString*) text
               andFirstButton:(NSString*) firstButtonText
              andSecondButton:(NSString*) secondButtonText;

@end


2) en el .m
a) en el commonInit asociar el tap a los botones:
        handle_tap(self.btnCloseButton, self, @selector(onClosePressed:));
        handle_tap(self.btnFirstButton, self, @selector(onFirstButtonPressed:));
        handle_tap(self.btnSecondButton, self, @selector(onSecondButtonPressed:));
b) asociar el delegate al evento
- (void) onClosePressed:(UITapGestureRecognizer*) sender{
    
    if(self.delegate){
        [self.delegate confirmAlertViewClosed:self];
    }
}


- (void) onFirstButtonPressed:(UITapGestureRecognizer*) sender{
    
    if(self.delegate){
        [self.delegate confirmAlertViewFirstButton:self];
    }
}


- (void) onSecondButtonPressed:(UITapGestureRecognizer*) sender{

    if(self.delegate){
        [self.delegate confirmAlertViewSecondButton:self];
    }
}

3) en el .h de la clase desde la que se llama
@interface LOAppsViewController : LOViewController <LOConfirmAlertViewDelegate>

4) Implementar la llamada y delegate de cada evento
        UIWindow* window = [UIApplication sharedApplication].keyWindow;
        LOConfirmAlertView *cav = [[LOConfirmAlertView alloc] initWithFrame:CGRectMake(0, 0, window.frame.size.width, window.frame.size.height)
                                                                  withTitle:NSLocalizedString(@"AppLock_Title",nil)
                                                                    andText:NSLocalizedString(@"AppLock_Message",nil)
                                                             andFirstButton:NSLocalizedString(@"AppLock_SetTimeRange",nil)
                                                            andSecondButton:NSLocalizedString(@"AppLock_AtAllTimes",nil) ];
        
        cav.delegate = self;
        [self.view addSubview:cav];



#pragma-mark LOConfirmAlertViewDelegate
- (void) confirmAlertViewFirstButton: (LOConfirmAlertView*) cav{
    [cav removeFromSuperview];
    [self setTimeRange];
}

-(void) confirmAlertViewSecondButton: (LOConfirmAlertView*) cav{
    [cav removeFromSuperview];
    [self prepareNewTimeRange];
}

-(void) confirmAlertViewClosed: (LOConfirmAlertView*) cav{
    [cav removeFromSuperview];
}

-(void) closeAlert{
    [self.tableView reloadData];
}