Objective c Obj-C:从何处#导入协议头文件
在iOS应用程序中,我正在定义自己的协议,以便在自定义视图控制器中使用委托模式。哪些文件应该导入哪些其他文件?换句话说,我的案件涉及四个文件:Objective c Obj-C:从何处#导入协议头文件,objective-c,ios,import,header,protocols,Objective C,Ios,Import,Header,Protocols,在iOS应用程序中,我正在定义自己的协议,以便在自定义视图控制器中使用委托模式。哪些文件应该导入哪些其他文件?换句话说,我的案件涉及四个文件: MainViewController.h:声明协议和视图控制器,然后执行协议 MainViewController.m:实现协议方法 SecondaryViewController.h:声明类型为id的委托实例变量和属性(带有协议的前向声明) SecondaryViewController.m:在代理上使用协议方法 哪些文件应该导入哪些其他文件?我认
:声明协议和视图控制器,然后执行协议MainViewController.h
:实现协议方法MainViewController.m
:声明类型为SecondaryViewController.h
的委托实例变量和属性(带有id
协议的前向声明)
:在代理上使用协议方法SecondaryViewController.m
哪些文件应该导入哪些其他文件?我认为第二个视图控制器的标题中的转发声明就足够了,但是,除非第二个标头或实现导入主标头,否则我会收到编译警告/错误。
SecondaryViewController.m
应该导入“MainViewController.h
SecondaryViewController.m应该在使用协议方法时导入标头。让我们说一下具有一些委托的PrimaryViewController响应的方法。然后,次视图控制器应实现其委托以使用它。委托方法在PrmaryViewController中声明,并在其委托类(此处为SecondaryViewController)中定义
在主视图控制器中,您只需将委托声明为
@protocol PrimaryDelegate
@interface PrimaryViewController : NSObject
<id>PrimaryDelegate;
@end
@protocol PrimaryDelegate
-(void)secondaryViewControllerWantsToCallThisDelegate;
@end
在“实施”部分中,将代理分配给self as
primary.delegate = self;
并将primarydelegate中描述的方法定义到次要视图控制器中
-(void)secondaryViewControllerWantsToCallThisDelegate{
//some method definition here
}
这是向后看的。MainViewController定义一个协议然后实现它是没有意义的。协议的要点是定义其他人要实现的方法。例如,查看Xcode 4.2实用程序应用程序项目模板:
// [FlipsideViewController.h]
@protocol FlipsideViewControllerDelegate
- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller;
@end
@interface FlipsideViewController : UIViewController
@property (weak, nonatomic) IBOutlet id <FlipsideViewControllerDelegate> delegate;
@end
// [MainViewController.h]
#import "FlipsideViewController.h" // so that it can see the protocol definition
@interface MainViewController : UIViewController <FlipsideViewControllerDelegate>
@end
/[FlipsideViewController.h]
@协议FlipsideViewControllerDelegate
-(void)FlipSideViewControllerdFinish:(FlipsideViewController*)控制器;
@结束
@界面FlipsideViewController:UIViewController
@属性(弱、非原子)IBID委托;
@结束
//[MainViewController.h]
#导入“FlipsideViewController.h”//以便查看协议定义
@接口MainViewController:UIViewController
@结束
结果是MainViewController可以实例化FlipsideViewController并将其自身设置为FlipsideViewController的委托。现在FlipsideViewController可以使用FlipsideViewControllerDelegate方法通过其委托
属性与MainViewController进行对话,同时对其真实类保持不可知状态
// [FlipsideViewController.h]
@protocol FlipsideViewControllerDelegate
- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller;
@end
@interface FlipsideViewController : UIViewController
@property (weak, nonatomic) IBOutlet id <FlipsideViewControllerDelegate> delegate;
@end
// [MainViewController.h]
#import "FlipsideViewController.h" // so that it can see the protocol definition
@interface MainViewController : UIViewController <FlipsideViewControllerDelegate>
@end