2011-02-25 32 views
0

我嘗試子類UScrollview,但它最終失去了默認的UIScrollview委託方法。我失去我的默認UIScrollViewdelegate方法時,我的子類

#import <UIKit/UIKit.h> 
@protocol myscrollviewDelegate <NSObject> 
-(void) myscrollview_return; 
@end 

@interface myscrollview : UIScrollView <UIScrollViewDelegate> { 
     id<myscrollviewDelegate> delegate; 
} 

@property(nonatomic, assign) id<myscrollviewDelegate> delegate; 

@end 
  • (無效)scrollViewDidEndDecelerating:(UIScrollView的*)滾動視圖

永遠不會被調用時滾動。

有什麼不對?我可以繼承UIScrollview並添加額外的委託,並在同一時間保持原始代表?

回答

1

您不是添加屬性,而是覆蓋它,因爲UIScrollView已經有一個委託屬性。當您使用新屬性設置委託時,引用將存儲在您添加的實例變量中,而不是存儲在原始UIScrollView的私有實例變量中。

我的理論是,UIScrollView的實現訪問實例變量而不使用屬性。我沒有驗證它,但嘗試不添加新伊娃和重寫委託屬性。

-1

這是因爲您使用id id delegate實現委託方法;我希望如此 所以更改委託的名稱。而是採用委託使用的其他名稱,比如「delegateSomeClass」等 現在的UIScrollView的委託方法調用

希望它會清除:)

0

你可以做到這一點,而無需創建第二委託財產。

首先,請您委託協議從UIScrollViewDelegate繼承:

@protocol myscrollviewDelegate <NSObject, UIScrollViewDelegate> 

然後,聲明在標題中的委託財產類:

@interface myscrollview : UIScrollView <UIScrollViewDelegate> 
@property(nonatomic, assign) id<myscrollviewDelegate> delegate; 

而且關鍵是合成該屬性,而是在您的實現文件中使其動態化。

@implementation myscrollview 
@dynamic delegate; 
...