1

我正在尝试通过在另一个类接口文件中实现委托来实现委托,如下所示:

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

图像滚动视图.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 

视图控制器子类.m

#import "ViewControllerSubclass.h"
#import "ImageScrollView.h"

@implementation ViewControllerSubClass

- (void)loadView
{
    ...

    [[self scrollView] setImageScrollViewDelegate:self];

    ...


- (void) scrollViewDidScroll:(UIScrollView *)scrollView
{
    ...   
}

- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
    ...
}

在@interface@interface ViewControllerSubClass : UIViewController <ImageScrollViewDelegate>ViewControllerSubclass.h,我收到警告:“找不到“ImageScrollViewDelegate”的协议定义四次,但代码仍在工作。

任何人都知道如何摆脱警告,或者如何正确实现委托(更好地使用单独的文件?)。

4

3 回答 3

2

您不能转发声明您正在实施的协议。你需要#import ImageScrollView.h而不是声明@protocol ImageScrollViewDelegate. 它起作用的原因是因为该方法在运行时调用时存在于您的实现中,而出现警告的原因是因为编译器在编译时不知道协议中有哪些方法。

于 2012-05-17T19:31:17.867 回答
2

#import "ImageScrollView.h"from移动ViewControllerSubClass.mViewControllerSubClass.h。完成此操作后,您可以删除@protocol ImageScrollViewDelegate;.

于 2012-05-17T19:34:41.373 回答
0

在 ViewControllerSubclass.h 文件中写入 #import "ImageScrollView.h" 并从 ViewControllerSubclass.m 文件中删除相同的内容。

于 2012-05-17T19:33:46.513 回答