我正在尝试通过在另一个类接口文件中实现它来实现委托,如下所示:
ImageScrollView.h
#import <UIKit/UIKit.h>
@protocol ImageScrollViewDelegate <NSObject>
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
- (void)scrollViewDidZoom:(UIScrollView *)scrollView;
@end
@interface ImageScrollView : UIScrollView <UIScrollViewDelegate>
{
id <ImageScrollViewDelegate> _imageScrollViewDelegate;
}
@property(nonatomic, assign) id <ImageScrollViewDelegate> imageScrollViewDelegate;
@end
ImageScrollView.m
#import "ImageScrollView.h"
@implementation ImageScrollView
@synthesize imageScrollViewDelegate = _imageScrollViewDelegate;
...
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
[self.imageScrollViewDelegate scrollViewDidScroll:scrollView];
}
- (void)scrollViewDidZoom:(UIScrollView *)scrollView;
{
[self.imageScrollViewDelegate scrollViewDidZoom:scrollView];
}
...
@end
然后我有一个实现ImageScrollViewDelegate的viewController:
ViewControllerSubClass.h
#import <UIKit/UIKit.h>
@protocol ImageScrollViewDelegate;
@interface ViewControllerSubClass : UIViewController <ImageScrollViewDelegate> //warning is here
{
}
@end
ViewControllerSubClass.m
#import "ViewControllerSubclass.h"
#import "ImageScrollView.h"
@implementation ViewControllerSubClass
- (void)loadView
{
...
[[self scrollView] setImageScrollViewDelegate:self];
...
- (void) scrollViewDidScroll:(UIScrollView *)scrollView
{
...
}
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
...
}
在@interface ViewControllerSubClass : UIViewController <ImageScrollViewDelegate>
的@interface ViewControllerSubclass.h
中,我收到警告:“找不到”ImageScrollViewDelegate“的协议定义四次,但代码仍在运行。
任何人都知道如何摆脱警告,或者如何正确实现委托(最好使用单独的文件?)。
答案 0 :(得分:2)
您无法转发声明正在实施的协议。您需要#import
ImageScrollView.h
而不是声明@protocol ImageScrollViewDelegate
。它工作的原因是因为该方法在运行时调用时存在于实现中,并且警告的原因是编译器在编译时不知道协议中有哪些方法。
答案 1 :(得分:2)
将#import "ImageScrollView.h"
从ViewControllerSubClass.m
移至ViewControllerSubClass.h
。完成后,您可以删除@protocol ImageScrollViewDelegate;
。
答案 2 :(得分:0)
在ViewControllerSubclass.h文件中编写#import“ImageScrollView.h”并从ViewControllerSubclass.m文件中删除它。