使用类别中的代理

时间:2013-08-06 16:59:21

标签: objective-c delegates objective-c-category

我创建了一个包含2个属性的类别,但是我在尝试使用一个属性作为委托时遇到了问题。

    //  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];}

动画块完成后,委托将用于通知:

    [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];}];

我的问题是delegateForDropDown始终包含nil。 boolean属性工作正常,所以我怀疑它与委托的类型为id

有关

1 个答案:

答案 0 :(得分:0)

发现问题。编程错误对我而言。我正在为错误的视图设置委托属性,因此问题出在调用类中。它现在工作正常。 TomSwift向我指出了正确的方向。感谢。