OC - 委托(Delegates)

OC - 委托(Delegates) 首页 / iOS入门教程 / OC - 委托(Delegates)

假设对象A调用对象B来执行操作,动作完成后,对象A应知道B已完成任务并采取必要的措施,这是在代表的帮助下实现的。

上面示例中的关键概念是-

  • A是B的委托对象。

  • B将引用A。

  • A将实现B的委托方法。

  • B将通过委托方法通知A。

创建步骤

第1步 - 首先,创建一个单视图应用程序。

第2步 - 然后选择File→New→File...

iOS Tutorial

第3步 - 然后选择" Objective C Class",然后单击" Next"。

第4步 - 为该类命名,如SampleProtocol,其子类为NSObject,如下所示。

iOS Tutorial

第5步 - 然后选择创建。

第6步 - 将协议添加到SampleProtocol.h文件,更新后的代码如下-

链接:https://www.learnfk.comhttps://www.learnfk.com/ios/ios-delegates.html

来源:LearnFk无涯教程网

#import <Foundation/Foundation.h>

//协议定义从这里开始
@protocol SampleProtocolDelegate <NSObject>
@required
- (void) processCompleted;
@end

//协议定义到此结束
@interface SampleProtocol : NSObject {
   //Delegate to respond back
   id <SampleProtocolDelegate> _delegate; 
}
@property (nonatomicstrong) id delegate;

-(void)startSampleProcess; //实例方法
@end

第7步 - 如下所示,通过更新SampleProtocol.m文件来实现方法。

#import "SampleProtocol.h"

@implementation SampleProtocol

-(void)startSampleProcess {
   [NSTimer scheduledTimerWithTimeInterval:3.0 target:self.delegate 
	selector:@selector(processCompleted) userInfo:nil repeats:NO];
}
@end

第8步 - 如下所示,通过将标签从对象库拖动到UIView,在ViewController.xib中添加UILabel。

iOS Tutorial

 第9步 - 为标签创建一个IBOutlet,并将其命名为myLabel,并按如下所示更新代码以在ViewController.h中采用SampleProtocolDelegate。

#import <UIKit/UIKit.h>
#import "SampleProtocol.h"

@interface ViewController : UIViewController<SampleProtocolDelegate> {
   IBOutlet UILabel *myLabel;
}
@end

第10步 - 实现委托方法,为SampleProtocol创建对象,然后调用startSampleProcess方法。更新的ViewController.m文件如下-

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
   [super viewDidLoad];
   SampleProtocol *sampleProtocol = [[SampleProtocol alloc]init];
   sampleProtocol.delegate = self;
   [myLabel setText:@"Processing..."];
   [sampleProtocol startSampleProcess];
   //在加载视图后进行任何额外的设置,通常是从一个 nib 开始。
}

- (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];
   //处置任何可以重新创建的资源。
}

#pragma mark - Sample protocol delegate
-(void)processCompleted {
   [myLabel setText:@"Process Completed"];
}
@end

第11步  - 无涯教程将看到如下输出。最初,标签显示"Processing...",一旦SampleProtocol对象调用了委托方法,该标签就会更新。

iOS Tutorial

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

程序员进阶攻略 -〔胡峰〕

如何设计一个秒杀系统 -〔许令波〕

编辑训练营 -〔总编室〕

消息队列高手课 -〔李玥〕

Java业务开发常见错误100例 -〔朱晔〕

恋爱必修课 -〔李一帆〕

说透数字化转型 -〔付晓岩〕

爆款文案修炼手册 -〔乐剑峰〕

Web 3.0入局攻略 -〔郭大治〕

好记忆不如烂笔头。留下您的足迹吧 :)