J'ai créé une catégorie avec 2 propriétés, mais j'ai un problème en essayant d'en utiliser une en tant que délégué.Utilisation d'un délégué dans une catégorie
// UIView+Dropdown.h
#import <UIKit/UIKit.h>
@protocol DropDownAnimationDoneDelegate <NSObject>
-(void) onDropDownAnimationDone:(id)sender;
@end
@interface UIView (Dropdown)
@property (strong, nonatomic) id <DropDownAnimationDoneDelegate> delegateForDropDown;
@property (nonatomic,assign) BOOL isDropped;
// UIView+Dropdown.m
#import "UIView+Dropdown.h"
#import <objc/runtime.h>
@implementation UIView (Dropdown)
-(void)setDelegateForDropDown:(id)ddDelegate{
objc_setAssociatedObject(self, @selector(delegateForDropDown),ddDelegate,OBJC_ASSOCIATION_RETAIN_NONATOMIC);}
-(id)delegateForDropDown{
return objc_getAssociatedObject(self, @selector(delegateForDropDown));}
-(void)setIsDropped:(BOOL)dropIt{
objc_setAssociatedObject(self, @selector(isDropped), [NSNumber numberWithBool:dropIt], OBJC_ASSOCIATION_RETAIN_NONATOMIC);}
-(BOOL)isDropped{
return [objc_getAssociatedObject(self, @selector(isDropped)) boolValue];}
Le délégué sera utilisé pour la notification après un bloc d'animation est terminée:
[UIView animateWithDuration:0.75
delay:0.0
options:UIViewAnimationOptionCurveEaseInOut
animations:^{self.center = newCenter;}
completion:^(BOOL finished){
if ([[self delegateForDropDown] respondsToSelector:@selector(onDropDownAnimationDone:)])
[[self delegateForDropDown] onDropDownAnimationDone:self];}];
Mon problème est delegateForDropDown
contient toujours nil
. La propriété booléenne fonctionne correctement, donc je suppose que cela a quelque chose à voir avec le type de délégué en cours d'identification
Qu'essayez-vous d'atteindre en utilisant ce hackage d'objets associés? –
J'ai créé une sous-classe de vue qui se comporte comme une liste déroulante. Maintenant, je veux utiliser le comportement de l'animation sur d'autres vues (comme un UIButton), j'ai donc décidé de créer une catégorie à utiliser sur n'importe quelle vue. J'ai tout fonctionné sauf pour le notifié de l'achèvement de l'animation. – JVC
vous ne montrez aucun paramètre de code delegateForDropdown sur self. mais je présume que vous faites cela? – TomSwift