1

我对 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
4

3 回答 3

2

为了具体回答您的问题,您正在重新定义delegate您从中获得的属性的属性属性UIScrollView。它应该像所有代表一样是weak(或者,iOS 5 之前的版本unsafe_unretained)。

但是,您不应该这样做。UIScrollView已经有一个委托,如果您希望将实现新委托方法的自己的委托对象放入其中,那么内部的工作UIScrollView将不会令人满意。为它定义一个新协议和一个新的委托属性。

@property (weak, nonatomic) id<ChangeSpaceDelegate> changeSpaceDelegate;
于 2012-10-11T01:20:13.573 回答
1

您不必delegate在自定义滚动视图类中创建对象,因为您是从UIScrollView. self.delegate您可以像在自定义滚动视图类中一样直接使用它。

于 2012-10-11T02:32:10.323 回答
1

正如@Steve Madsen 所提到的,我经常为子类添加自己的委托属性。LikeUITableView具有单独的DataSourceDelegate属性,并且被分配了相同的对象。从长远来看,这肯定会得到回报,因为它不会强迫您重复已经在超类中实现的内容,并使您的子类实现更易于管理

于 2012-10-11T03:50:44.317 回答