2012-10-11 120 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属性,并被分配了相同的对象。从长远来看,这一定会得到回报,不会迫使您重复已经在超级课程中实施的内容,并保持您的子类实现更易于管理。