当我将其子类化时,我将失去默认的UIScrollViewdelegate方法

时间:2011-02-25 23:56:04

标签: iphone uiscrollview

我尝试将UScrollview子类化,但最终失去了默认的UIScrollview委托方法。

#import <UIKit/UIKit.h>
@protocol myscrollviewDelegate <NSObject>
-(void) myscrollview_return;
@end

@interface myscrollview : UIScrollView <UIScrollViewDelegate> {
      id<myscrollviewDelegate> delegate;
}

@property(nonatomic, assign)  id<myscrollviewDelegate> delegate;

@end
  • (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

滚动时永远不会被调用。

怎么了?我可以继承UIScrollview并添加additonal委托,同时保留原始委托吗?

3 个答案:

答案 0 :(得分:1)

您没有添加属性,而是覆盖它,因为UIScrollView已经具有委托属性。使用new属性设置委托时,引用将存储在您添加的实例变量中,而不是存储在原始UIScrollView的私有实例变量中。

我的理论是UIScrollView的实现在不使用属性的情况下访问实例变量。我没有验证它,但是尝试不添加新的ivar并覆盖委托属性。

答案 1 :(得分:0)

您可以在不创建第二个委托属性的情况下执行此操作。

首先,让您的委托协议继承自UIScrollViewDelegate:

@protocol myscrollviewDelegate <NSObject, UIScrollViewDelegate>

然后,在您的类的标题中声明delegate属性:

@interface myscrollview : UIScrollView <UIScrollViewDelegate>
@property(nonatomic, assign)  id<myscrollviewDelegate> delegate;

关键是合成属性,而是在实现文件中使其动态化。

@implementation myscrollview
@dynamic delegate;
...

答案 2 :(得分:-1)

这是因为您使用id id delegate实现委托方法;希望如此 所以改变代表的名字。而是使用委托使用其他名称,如“delegateSomeClass”等 现在UIscrollView的委托方法调用

希望它能清楚:)