在UIScrollView子类中创建委托

时间:2012-10-11 01:08:33

标签: objective-c ios delegates

我已经将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

3 个答案:

答案 0 :(得分:2)

要具体回答您的问题,您要重新定义delegateUIScrollView获取的属性。它应该像所有代表一样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类似,具有单独的DataSourceDelegate属性,并且分配了相同的对象。从长远来看,这肯定会因为不强制你重复已经在超类中实现的内容而保持你的子类实现更易于管理而获得回报