求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
要资料
 
 
 

iOS教程
iOS (iPhone, iPad)教程
IOS - 快速入门
IOS - 开发环境配置
iOS - Objective-C基础
iOS - 创建第一个
IOS - 动作和插座
iOS - Delegates实例
iOS - UI元素
iOS - Accelerometer(加
IOS - 通用应用程序
IOS - 摄像头管理
iOS - 位置处理
iOS - SQLite 数据库
iOS - 发送电子邮箱
iOS - 音频和视频
IOS - 文件处理
IOS - 访问地图
iOS - 应用程序内购买
iOS - iAd 整合
 
 

iOS - Delegates实例
1020 次浏览
43次  

举例委托(delegate)

让我们假设一个对象A调用对象B执行一个动作,一旦操作完成对象A知道B已经完成了任务,并采取必要的动作,在委托的帮助下。

在上述例子中的关键概念是,

  • A是B的委托对象
  • B是是A的参考(引用)
  • A将实现委托B的方法
  • B将通知A通过委托方法。

创建一个委托的步骤

1. 首先,创建一个单一的视图应用。

2. 选择 File -> New -> File...

3. 然后选择Objective C类并点击 Next.

4. 类名称为 SampleProtocol 为NSObject的子类,如下图所示。

5. 选择创建 create.

6. 添加协议的SampleProtocol.h文件和更新后的代码如下。

#import <Foundation/Foundation.h>
// Protocol definition starts here
@protocol SampleProtocolDelegate <NSObject>
@required
- (void) processCompleted;
@end
// Protocol Definition ends here
@interface SampleProtocol : NSObject

{
// Delegate to respond back
id <SampleProtocolDelegate> _delegate;

}
@property (nonatomic,strong) id delegate;

-(void)startSampleProcess; // Instance method

@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. 添加的 UILabel ViewController.xib从对象库中拖动标签 UIView,如下图所示。

9. 创建一个IBOutlet 标签,并将其命名为 myLabel,并更新SampleProtocolDelegate的代码如下在ViewController.h 文件中

#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];
// Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

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


@end

11. 我们将看到如下的输出,最初的标签将处理得到更新一次委托方法被调用通过 SampleProtocol对象。

 

 


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



1020 次浏览
43次
 捐助