2012-10-11 44 views
1

我已經子類化了一個UIScrollView來自定義它。我試圖創建一個委託,它會通知其他幾個類,用戶在UIScrollView中做了某些事情。在我的UIScrollView類中,我有下面的代碼。我遇到的問題是我收到警告在UIScrollView子類中創建委託

住宅'代表「保留(或強)的UIScrollView」

我看到「屬性確實繼承自 屬性不匹配」這是因爲我的類繼承自UIScrollView,但我的委託符合NSObject。這是我第一次嘗試創建自己的代理人。我能做些什麼來解決這個問題?

我的代碼:

#import <UIKit/UIKit.h> 

@protocol ChangeSpaceDelegate <NSObject> 
- (void)changeSpace:(int)spaceId; 

@end 

@interface CustomUIScrollView : UIScrollView { 
    id<ChangeSpaceDelegate> delegate; 
} 

@property (retain, nonatomic)id delegate; 

@end 

回答

2

要回答你的問題而言,你是在delegate屬性,您從UIScrollView得到重新定義property屬性。它應該像所有代表一樣,是weak(或者,iOS 5之前,unsafe_unretained)。

但是,你不應該這樣做。 UIScrollView已經有一個委託,如果您希望將您自己的委託對象實現您的新委託方法,UIScrollView的內部工作將不會很開心。爲它定義一個新的協議和一個新的委託屬性。

@property (weak, nonatomic) id<ChangeSpaceDelegate> changeSpaceDelegate; 
1

你不必因爲你是從UIScrollView繼承它來創建自定義滾動視圖類delegate對象。您可以在自定義滾動視圖類中直接使用它作爲self.delegate

1

正如@Steve Madsen所說,我經常爲子類添加自己的委託屬性。像UITableView具有單獨的DataSourceDelegate屬性,並被分配了相同的對象。從長遠來看,這一定會得到回報,不會迫使您重複已經在超級課程中實施的內容,並保持您的子類實現更易於管理。