iOS基础 - 代理:实现页面传值

▶ 代理传值

delegate 和 block 常用于逆向传值,两者都比较好用,但还是有区别的

A. delegate 在写法上比较麻烦,一方必须设置代理,另一方必须遵循代理且实现代理!其优势是代理的回调函数可以是多个函数,在不同的时机调用不同的回调函数;也可以说在一个协议中定义多个方法,在不同的触发事件中执行

B. block 在写法上比较自由,是一种轻量级的回调,它能够直接访问上下文,使用块的地方和块的实现地方在同一个地方,使得代码组织更加连贯。但是在使用 block 时需要注意防止循环引用,导致内存泄漏的问题

▶ 代码示例

实现第二页面向第一页面传值

// - SecondViewController.h:首先在将要传值的页面中制定协议并声明代理方法(方法接口)、代理

复制代码
#import <UIKit/UIKit.h>
// 第一步:制定协议
@protocol GivenValues <NSObject>
// 并声明代理方法
-(void)giveValuesFromNextPage:(NSString*)name;
@end

@interface SecondViewController : UIViewController
// 第二步:代理
@property(nonatomic,weak)id<GivenValues>delegate;
@end
复制代码

// - SecondViewController.m

复制代码
#import "SecondViewController.h"
@implementation SecondViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
}

// 第五步:代理传值
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    [self dismissViewControllerAnimated:YES completion:^{
        if ([self->_delegate respondsToSelector:@selector(giveValuesFromNextPage:)]) {
            [self->_delegate giveValuesFromNextPage:@"代理传值"];
        }
    }];
}

@end
复制代码

// - ViewController.m:在接受传值的页面中接受协议、且成为代理后,实现代理方法

复制代码
#import "ViewController.h"
#import "SecondViewController.h"// 需引入头文件
@interface ViewController()<GivenValues>// 第三步:接受协议
@end

@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor yellowColor];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    
    SecondViewController *secVC = [SecondViewController new];
    secVC.delegate = self;// 指定代理
    [self presentViewController:secVC animated:YES completion:nil];
}

// 第四步:实现传值页面中的代理方法
-(void)giveValuesFromNextPage:(NSString *)name{
    NSLog(@"代理方法触发!name = %@",name);
}
@end
复制代码

 

posted on   低头捡石頭  阅读(21)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示