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

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@interface ViewControllerSubClass : UIViewController <ImageScrollViewDelegate>ViewControllerSubclass.h、「 "ImageScrollViewDelegate"のプロトコル定義が4回見つかりませんが、コードはまだ機能しています」という警告が表示されます。

警告を取り除く方法、またはデリゲートを適切に実装する方法を知っている人は誰でもいます(別のファイルを使用する方が良いですか?)。

4

3 に答える 3

2

実装しているプロトコルを前方宣言することはできません。#import ImageScrollView.h宣言するのではなく、する必要があります@protocol ImageScrollViewDelegate。これが機能する理由は、実行時に呼び出されたときにメソッドが実装に存在するためです。警告の理由は、コンパイラがコンパイル時にプロトコルに含まれるメソッドを認識していないためです。

于 2012-05-17T19:31:17.867 に答える
2

#import "ImageScrollView.h"からViewControllerSubClass.mをに移動しViewControllerSubClass.hます。これを行うと、を削除できます@protocol ImageScrollViewDelegate;

于 2012-05-17T19:34:41.373 に答える
0

ViewControllerSubclass.hファイルに#import"ImageScrollView.h"を書き込み、ViewControllerSubclass.mファイルから同じものを削除します。

于 2012-05-17T19:33:46.513 に答える