我尝试将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
滚动时永远不会被调用。
怎么了?我可以继承UIScrollview并添加additonal委托,同时保留原始委托吗?
答案 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的委托方法调用
希望它能清楚:)