【问题标题】:Creating Delegate in UIScrollView Subclass在 UIScrollView 子类中创建委托
【发布时间】:2012-10-01 14:21:14
【问题描述】:

我对 UIScrollView 进行了子类化以对其进行一些自定义。我正在尝试创建一个委托,它将通知其他几个类用户在 UIScrollView 中做了某件事。在我的 UIScrollView 类中,我有下面的代码。我遇到的问题是我收到警告

Property 'delegate' 'retain (or strong)' 属性不匹配 继承自 '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

【问题讨论】:

    标签: objective-c ios delegates


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      您不必在自定义滚动视图类中创建delegate 对象,因为您是从UIScrollView 继承它的。您可以在自定义滚动视图类中直接将其用作self.delegate。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2015-06-20
          • 1970-01-01
          • 2017-07-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多