前景笔记:IOS 界面传值实现的6种方式(一)介绍了三种界面传值方法:属性传值、单例传值、NSUserDefaults传值。
四、代理传值
根据下面的示意图,了解代理的原理,与java中的写法基本相同。
莫名的写了一下java代码,功能是:AClass向自己的接口对象方法中发生数据,BClass实现Delegate接口,并打印接口方法收到的数据,实现基本的通讯。代码如下。
interface Delegate{
void data(String clsName,String str);
}
public class AClass {
//定义一个接口对象
private Delegate delegate;
//现实set方法
public void setDelegate(Delegate delegate){
this.delegate = delegate;
}
//模拟回传方法函数
public void sendMessage(String clsName,String str){
System.out.println("AClass 收到 "+clsName+" 消息:"+str);
sendserver(clsName+"你好");
}
private void sendserver(String str){
//向接口方法中广播
delegate.data(this.getClass().getSimpleName(),str);
}
}
class BClass implements Delegate//实现delegate 接口
{
AClass aClass;
public BClass(){
aClass = new AClass();//初始化Aclass
//注册、建立接口关系
//与oc中的 委托方.Delegate = self ;吧 必须建立关系
aClass.setDelegate(this);
}
public void sendA(){
aClass.sendMessage(this.getClass().getSimpleName(),
aClass.getClass().getSimpleName()+"你好");//模拟控制A 通信
}
//实现接口方法 ,接受传递过来的内容
public void data(String clsName,String str){
System.out.println("BClass 收到 "+clsName+" 消息:"+str);
}
}
class Main{
public static void main(String[] s){
//初始化BClass 并触发发送内容
new BClass().sendA();
}
}
运行main方法打印出的日志如下:
下面介绍OC中代理的实现:
我们要实现A (代理方)接收 B(委托方) 首先需要在(B.h)委托方中创建一个协议,添加协议方法,然后定义一个持有协议的ID指针。
// BViewController.h
// 界面传值Demo
//
#import <UIKit/UIKit.h>
//委托方
@protocol DataDelegate <NSObject>
//协议方法
- (void)dataValue:(NSString *) str;
- (void)setVlalue:(NSString*) str;
@end
@interface BViewController : UIViewController
/**定义一个持有协议的ID指针*/
@property (weak) id<DataDelegate>delegate;
@end
1、在A中遵循协议,并实现协议方法
// ViewController.m
// 界面传值Demo A 界面
//
#import "ViewController.h"
#import "BViewController.h"