iOS 协议传值和属性传值

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

简单介绍一下iOS中的协议传值和属性传值


一、协议传值

定义

协议传值是一种反向传值。指把数值从第二个界面(B)传入第一个界面(A)
协议是一个方法签名列表,在其中可以定义很多个方法。

实现

  • 在要传递值的页面B中声明一份协议
  • 在要传值的页面B中声名一个代理属性
  • 在接收页面A中添加方法
  • 在A中签订协议

在B控制器中声明一份协议


@protocol VCSecondDelegate <NSObject>

- (void)changeColor: (UIColor*)color;

在B视图中声明一个代理属性

@property(assign,nonatomic)id<VCSecondDelegate > delegate;

在B视图中添加一个按钮,并设置按钮触发事件

- (void)viewDidLoad {
    [super viewDidLoad];
    UIButton* btn = [[UIButton alloc] init];
    btn.frame = CGRectMake(100, 100, 100, 100);
    [btn setTitle:@"111" forState:UIControlStateNormal];
    [self.view addSubview:btn];
    [btn addTarget:self action:@selector(pressChange) forControlEvents:UIControlEventTouchUpInside];
    // Do any additional setup after loading the view.
}
- (void)pressChange{
    [_delegate changeColor:[UIColor redColor]];
}

在A视图中签订协议


@interface vcFirst :
UIViewController<VCSecondDelegate>

签订代理对象

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    vcSecond* vcSecond = [[vcSecond alloc] init];
    vcSecond.title = @"B";
    vcSecond.delegate = self;
    [self.navigationController pushViewController:vcSecond animated:YES];
}

二、属性传值

定义

属性传值是正向传值。属性传值是指从A页面传值到B页面。属性传值 是最常用的传值方法。

实现

  • 在页面B中实现属性
  • 在页面B中设置协议
  • 在页面A的创建的页面B的控制器的方法礼进行赋值操作

在B中声明属性

@property (nonatomic,copy) NSString *bText;

在A中定义一个属性

@property (nonatomic,copy) NSString *aText;

在A中给B的属性进行复制并跳转控制器

- (void) press {
	SecondViewController *bViewController = [[SecondViewController alloc]init];
	bViewController.bText = aText;
	[self presentViewController:bViewController animated:YES completion:nil];
}

总结

当需要在第二界面中完成对数据的操作时,我们可以先把数据从第一界面利用属性传值传到的界面,在对数据进行相应操作后在利用协议传值将数据传至第一界面。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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
发出的红包

打赏作者

山河丘壑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值