IOS的四种传值方式

    在IOS界面跳转中,通常需要传值来解决一些实际问题,比如A界面跳转B界面时,需要告诉B界面显示那些内容。B界面做了某些操作之后,A界面需要做一些其他的操作等等。这些操作的数据来往,我们可以看做它在传值,所以传值不是我们一般意义的传一些数值过去,而是一些数据,可以是一些字符串,一个数组,某种状态等等。

    在介绍之前,先奉上自己做的Demo:https://github.com/LOLR2017/ByValDemo

    iOS界面间的传值方式大概可以分为以下四种:

        1.正向传值。

        2.反向传值。

        3.通知传值。

        4.单例传值。

    一、正向传值。当A界面向B界面跳转时,A界面将一些数据传给B界面,这就是正向传值。 

    SecondViewController *vc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil]           instantiateViewControllerWithIdentifier:@"SecondViewController"];

    vc.value = @"我是正向传值过来的";

    [self.navigationController pushViewController:vc animated:YES];

这就是一个正向传值的简单例子,在初始化完secondViewController之后,给它的一个属性赋值,然后在secondViewController用来显示或者一些其他的操作。由此可以看出正向传值是最简单,最基本的方式。

    二、反向传值。当A界面跳转B界面,B界面将一些数据传递给A界面时,这就是反向传值。

        反向传值相对来说比较复杂,比较常用的有代理和block两种方法,在这里我们只演示代理。

        第一步:为了方便理解,首先我们先在B界面定义一个协议,在协议里面在定义一个方法,方法的具体作用就是传值用的。

        

@protocol ThirdViewControllerDelegate <NSObject>


-(void)finishValue:(NSString *)string;


@end

        第二步:在B界面声明一个遵守该协议的属性。

        

@property (weak,nonatomic) id<ThirdViewControllerDelegate> delegate;

        第三步:在A界面初始化B界面时,同时给该属性设置代理对象为A界面,也就是self。

ThirdViewController *vc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"ThirdViewController"];

    vc.delegate = self;

    [self.navigationController pushViewController:vc animated:YES];

        vc.delegate = self。这句话就设置了代理对象。

        第四步:让A界面在遵守该协议。

        

@interface SecondViewController () <ThirdViewControllerDelegate>

        第五步:在A界面实现一些里面的传值方法,并改变一些显示等等。

        

- (void)finishValue:(NSString *)string {

    self.label.text = string;

}

        在这里我只是简单的做了一个显示。

        第六步:在B界面的触发事件里,让delegate属性调用传值方法。

        

[self.delegate finishValue:self.textField.text];

        到这里,我们使用代理的方法实现了反向传值。

    三、通知传值。利用通知中心,向某个已经注册了通知的对象发送数据。在实现方式上和反向传值大同小异。

        通知传值不一定发生在A界面和B界面之间,或许A界面与B界面没有什么关系,它们可能是并行存在的关系,比如tabbarController的每个tabbar上的viewController。

        第一步:在A界面注册是个通知,并实现接收通知的方法。

            

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notification:) name:@"notification" object:nil];

        注册一个通知,并且定义一个通知接收的方法,和通知的名称

-(void)notification:(NSNotification *)info {

    self.textField.text = info.userInfo[@"value"];

}

        实现接收通知的方法

        第二步:在B界面发送相同名称的通知。

        

[[NSNotificationCenter defaultCenter] postNotificationName:@"notification" object:nil userInfo:@{@"value":@"我是通知传值过来的"}];

        参数userInfo里面要放入需要发送的数据。这样就实现了通知传值。

    四、单例传值。创建一个单例类,定义某些属性用来存储数据,在使用的时候拿出来使用,这就是单例传值。这里就不演示了。

    IOS的四种传值方式到此就介绍完了,希望大家多多支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS中,可以通过WKWebView与JavaScript进行交互传值。以下是一些常见的方法: 1. 使用JavaScriptCore框架:在iOS 7及以上版本中,可以使用JavaScriptCore框架来实现WKWebView与JS的交互传值。具体实现步骤如下: (1)在iOS中创建一个JSContext实例,通过该实例可以操作JS环境。 (2)将JSContext实例设置到WKWebView的配置对象中。 (3)在JS中调用iOS方法时,可以通过window.webkit.messageHandlers对象进行调用,例如window.webkit.messageHandlers.methodName.postMessage(params)。 (4)在iOS中,可以通过WKScriptMessageHandler代理方法来接收JS传递的消息,并进行处理。 2. 使用WKScriptMessageHandler协议:在iOS 8及以上版本中,可以通过WKScriptMessageHandler协议来实现WKWebView与JS的交互传值。具体实现步骤如下: (1)在WKWebView的配置对象中设置WKUserContentController的代理对象,并添加需要监听的JS方法名。 (2)在JS中调用iOS方法时,可以通过window.webkit.messageHandlers对象进行调用,例如window.webkit.messageHandlers.methodName.postMessage(params)。 (3)在iOS中,可以通过WKScriptMessageHandler代理方法来接收JS传递的消息,并进行处理。 无论使用哪种方法,都需要注意JS和iOS之间传递的数据类型和格式。通常,JS传递的是字符串类型的数据,在iOS中需要进行解析和转换。同时,为了避免安全问题,需要对JS传递的数据进行校验和过滤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值