IOS 界面传值实现的6种方式(二)

本文介绍了iOS界面传值的两种常见方法:代理传值和Block传值。代理传值需要定义协议、指定代理对象并实现代理方法;Block传值则更为便捷,直接通过回调函数传递数据。通过实例代码展示了两种方法的具体实现过程。
摘要由CSDN通过智能技术生成

前景笔记: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"


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值