iOS 5.0 警告:找不到委托的协议定义



我有自定义UIView类GestureView。我有一个关于这个类的前向声明,下面是代表。我已经在.m文件中导入了GestureView.h。这工作正常,但iOS发出警告消息,指出"找不到GestureViewDelegate的协议定义"。如果我删除前向声明,它会给出与错误相同的警告消息。我不想从ContainerViewController.h导入GestureView.h,因为我通常在.m文件中导入内容。有人可以解释一下遵循类结构有什么问题吗?

ContainerViewController.h

#import <UIKit/UIKit.h>
@class DividerView;
@class GestureView;
@protocol GestureViewDelegate;
@interface ContainerViewController : UIViewController<GestureViewDelegate>
   @property (strong, nonatomic) IBOutlet GestureView *topContentView;
@end

手势视图.h

#import <UIKit/UIKit.h>
@protocol GestureViewDelegate;
@interface GestureView : UIView
    - (void)initialiseGestures:(id)delegate;
@end
@protocol GestureViewDelegate <NSObject>
@required
- (void)GestureView:(GestureView*)view handleSignleTap:(UITapGestureRecognizer*)recognizer;
@end
我喜欢

你试图避免在头文件中导入:非常好的做法。但是,要修复您的错误,您可以使您的代码变得更好!在我看来,您的ContainerViewController类实际上没有必要向外声明它支持GestureViewDelegate协议,因此您应该将其移动到您的实现文件中。这样:

手势视图.h

#import <UIKit/UIKit.h>

@protocol GestureViewDelegate;
@interface GestureView : UIView
- (void)initialiseGestures:(id <GestureViewDelegate>)delegate;
@end

@protocol GestureViewDelegate <NSObject>
@required
- (void)gestureView:(GestureView *)view handleSingleTap:(UITapGestureRecognizer *)recognizer;
@end

ContainerViewController.h

#import <UIKit/UIKit.h>

@class GestureView;
@interface CollectionViewController : UIViewController
// this property is declared as readonly because external classes don't need to modify the value (I guessed seen as it was an IBOutlet)
@property (strong, nonatomic, readonly) GestureView *topContentView;
@end

ContainerViewController.m

#import "ContainerViewController.h"
#import "GestureView.h"

// this private interface declares that GestureViewDelegate is supported
@interface CollectionViewController () <GestureViewDelegate>
// the view is redeclared in the implementation file as readwrite and IBOutlet
@property (strong, nonatomic) IBOutlet GestureView *topContentView;
@end

@implementation ContainerViewController
// your implementation code goes here
@end
<</div> div class="one_answers">

尝试这种方式,如果它有效,请回复。

手势视图.h

#import <UIKit/UIKit.h>
@protocol GestureViewDelegate <NSObject>
@required
- (void)GestureView:(GestureView*)view handleSignleTap:(UITapGestureRecognizer*)recognizer;
@end
@interface GestureView : UIView
    - (void)initialiseGestures:(id)delegate;
@end

容器视图.h

#import <UIKit/UIKit.h>
@class DividerView;
@class GestureView;
/*@protocol GestureViewDelegate;*/ //NO NEED TO WRITE THIS
@interface ContainerViewController : UIViewController<GestureViewDelegate>
   @property (strong, nonatomic) IBOutlet GestureView *topContentView;
@end

最新更新