我已经将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
答案 0 :(得分:2)
要具体回答您的问题,您要重新定义delegate
从UIScrollView
获取的属性。它应该像所有代表一样weak
(或者,在iOS 5之前,unsafe_unretained
)。
但是,你不应该这样做。 UIScrollView
已经有了一个委托,如果你希望将自己的委托对象实现新的委托方法,那么UIScrollView
的内部工作方式就不会幸福了。为它定义一个新协议和一个新的委托属性。
@property (weak, nonatomic) id<ChangeSpaceDelegate> changeSpaceDelegate;
答案 1 :(得分:1)
您不必在自定义scrollview类中创建delegate
对象,因为您从UIScrollView
继承它。您可以在自定义scrollview类中将其直接用作self.delegate
。
答案 2 :(得分:1)
正如@Steve Madsen所提到的,我经常为子类添加自己的委托属性。与UITableView
类似,具有单独的DataSource
和Delegate
属性,并且分配了相同的对象。从长远来看,这肯定会因为不强制你重复已经在超类中实现的内容而保持你的子类实现更易于管理而获得回报