ios中使用代理正向传值的办法

代理一般都是用于反向传值的,但是有时候可能项目的需要做正向传值,做法如下:

首先谁要传值谁就是委托,1.委托要做的事情就是写协议;2.拥有一个遵守该协议的delegate成员;3.使用这个delegate触发回调。

代码如下:

1.写协议

@protocol PassValue <NSobject>

  - (void)PassValue:(NSString *)name;

@end

2.成员属性

@property (nonatomic,weak) id delegate;

3.触发回调,传值

ThreeViewController *ThreeViewController = [[ThreeViewController alloc] init];

  self.delegate=ThreeViewController;//设置代理

 if ([self.delegate respondsToSelector:@selector(PassValue:)]) {

        [self.delegate PassValue:@"哈哈"];

    }

    [self presentViewController:ThreeViewController animated:YES completion:^{

    }];

在这里要注意了:

1.如果⚠️Class 'xxxxxViewController' does not conform to protocol 'PassValue'

证明你没有实现协议里面的方法,只要你实现协议的方法了就不会有警告了;

2.如果⚠️Assigning to 'id' from incompatible type 'xxxxxxViewController *__strong'

证明你没有遵守协议,如果你遵守了协议还有这个警告,(ps,当你遵守了协议,运行的结果没影响,可以不用理会,但是如果你还是想把警告去掉,你就如下去做:)

在你接收值的控制器.h文件中这样修改:

#import "SecondViewController.h"

@interface ThreeViewController : SecondViewController

SecondViewController是要传值的控制器;这样警告就会消失了;

委托写完了,现在写到代理了。

代理要做的事情:1.遵守协议;2.设置代理;3,实现代理方法

代码如下:1遵守协议

@interface ThreeViewController ()<PassValue>

设置代理上面写了,这里就不需要了;

3.实现代理方法

- (void)backPassValue:(NSString *)name

{

    NSLog(@"-------%@",name);

}

如果是用代理方向传值,一样的道理。。。。。。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容