- 定义协议:
在Objective-C中,使用
@protocol
关键字来定义协议。例如,定义一个用于数据传递的协议DataTransferProtocol
:
@protocol DataTransferProtocol <NSObject>
// 定义一个方法,用于传递数据,具体方法根据需求定义
- (void)transferData:(NSString *)data;
@end
- 在源视图控制器中定义委托属性并传递数据:
假设源视图控制器为
SourceViewController
。
#import <UIKit/UIKit.h>
// 引入定义的协议
#import "DataTransferProtocol.h"
@interface SourceViewController : UIViewController
// 定义委托属性,遵循协议
@property (nonatomic, weak) id<DataTransferProtocol> delegate;
- (IBAction)sendDataButtonTapped:(id)sender {
NSString *dataToSend = @"Hello, target view controller!";
// 判断委托是否实现了协议方法,若实现则调用
if ([self.delegate respondsToSelector:@selector(transferData:)]) {
[self.delegate transferData:dataToSend];
}
}
@end
- 在目标视图控制器中遵循协议并实现方法:
假设目标视图控制器为
TargetViewController
。
#import <UIKit/UIKit.h>
// 引入定义的协议
#import "DataTransferProtocol.h"
@interface TargetViewController : UIViewController <DataTransferProtocol>
@end
@implementation TargetViewController
- (void)transferData:(NSString *)data {
NSLog(@"Received data: %@", data);
// 这里可以对传递过来的数据进行处理,比如更新UI等
}
@end
- 设置委托关系:
在合适的地方,比如
AppDelegate
或者父视图控制器中设置委托关系。
#import "AppDelegate.h"
#import "SourceViewController.h"
#import "TargetViewController.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
SourceViewController *sourceVC = [[SourceViewController alloc] init];
TargetViewController *targetVC = [[TargetViewController alloc] init];
sourceVC.delegate = targetVC;
// 后续进行视图控制器的展示等操作
return YES;
}
@end