iOS代理模式的使用,委托(delegate)

在iOS开发中代理是非常常见和普遍的,代理是一种通用的设计模式,iOS中对代理支持的很好,由代理对象、委托者、协议三部分组成。

  • 协议:用来指定代理双方可以做什么,必须做什么。
  • 代理:根据指定的协议,完成委托方需要实现的功能。
  • 委托:根据指定的协议,指定代理去完成什么功能。

代理的具体实现:

首先要在委托方.h文件中定义声明:

 //MPMusicPlayingViewController.h
#import <UIKit/UIKit.h>    

@protocol MPMusicPlayingViewDelegate;//代理名称一般以委托方类名+delegate

@interface MPMusicPlayingView : UIView
 //遵循协议的一个代理变量定义 
@property (nonatomic,weak)id<MPMusicPlayingViewDelegate>delegate;

@end
//定义代理协议
@protocol MPMusicPlayingViewDelegate <NSObject>

- (void)MusicVcWantDoSomeThing:(NSString */*要传递的参数,此处以字符串为例*/)string;
//也可以不传参数只实现委托方法

@end

在委托方.m文件中:

 //MPMusicPlayingViewController.h
- (void)viewDidLoad{
    [super viewDidLoad];
    NSString *thank = @"tahankYou";
    [self iWantDoSomeThing:thank];
}

- (void)iWantDoSomeThing:(NSString *)string{
if (self.delefate respondsToSelector:@selector(MusicVcWantDoSomeThing:)) {
    //要在实现代理的.m中实现代理方法才会掉用
    [self.delegate MusicVcWantDoSomeThing:string];
  }
}

在代理方的.m文件中

 //MPMusicRootViewController
 #import "MPMusicPlayingViewController.h"//先包含委托方的头文件

 @interface MPMusicRootViewController ()< MPMusicPlayingViewDelegate >//这里要注意!

- (void)viewDidLoad {
[super viewDidLoad];

MPMusicPlayingViewController *PlayingVC = [[MPMusicPlayingViewController alloc] init];
PlayingVC.delegate = self;//设置代理实例
}
 //当MPMusicPlayingViewController中掉用iWantDoSomeThing:方法是此代理方法实现
- (void)MusicVcWantDoSomeThing:(NSString */*要传递的参数,此处以字符串为例*/)string{

  NSLog(@"传过来的值为:%@",string);
  //如果需要用可以定义个全局变量把string的值拿去用。
}

大多数人想要改造这个世界,但却罕有人想改造自己。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容