首页 > 其他分享 >iOS 多级页面之间的代理方法使用

iOS 多级页面之间的代理方法使用

时间:2024-01-24 17:02:01浏览次数:29  
标签:Page1ViewController 多级 Page4ViewController iOS 代理 delegate import Page2ViewContr

当然可以。为了提供一个更详细的示例,我将为每个页面(Page1ViewController、Page2ViewController、Page3ViewController 和 Page4ViewController)编写示例代码,以展示如何通过代理模式将数据从 Page4 传递回 Page1。

定义 Page4 的代理协议

首先,定义一个在 Page4ViewController 中使用的代理协议:

// Page4ViewController.h

#import <UIKit/UIKit.h>

@protocol Page4ViewControllerDelegate <NSObject>
- (void)page4ViewControllerDidUpdateValue:(NSString *)value;
@end

@interface Page4ViewController : UIViewController
@property (weak, nonatomic) id<Page4ViewControllerDelegate> delegate;
@end

Page1 实现代理协议

Page1ViewController 需要实现这个代理协议:

// Page1ViewController.h

#import <UIKit/UIKit.h>
#import "Page4ViewController.h"

@interface Page1ViewController : UIViewController <Page4ViewControllerDelegate>
@end

// Page1ViewController.m

#import "Page1ViewController.h"
#import "Page2ViewController.h"

@implementation Page1ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // 配置 Page1ViewController
}

- (void)page4ViewControllerDidUpdateValue:(NSString *)value {
    NSLog(@"Value from Page 4: %@", value);
    // 在这里处理从 Page4 传回的值
}

// 导航到 Page2
- (void)navigateToPage2 {
    Page2ViewController *page2VC = [[Page2ViewController alloc] init];
    page2VC.delegate = self; // 将 Page1 设置为 Page2 的代理
    [self.navigationController pushViewController:page2VC animated:YES];
}

@end

Page2 和 Page3 作为代理中继

在 Page2ViewController 和 Page3ViewController 中,需要将 Page1 作为代理传递给下一个页面:

// Page2ViewController.h

#import <UIKit/UIKit.h>
#import "Page4ViewController.h"

@interface Page2ViewController : UIViewController
@property (weak, nonatomic) id<Page4ViewControllerDelegate> delegate;
@end

// Page2ViewController.m

#import "Page2ViewController.h"
#import "Page3ViewController.h"

@implementation Page2ViewController

// 导航到 Page3
- (void)navigateToPage3 {
    Page3ViewController *page3VC = [[Page3ViewController alloc] init];
    page3VC.delegate = self.delegate; // 将代理传递给 Page3
    [self.navigationController pushViewController:page3VC animated:YES];
}

@end

Page3ViewController 的实现类似,也是将代理传递给 Page4ViewController。

Page4 使用代理传递数据

在 Page4ViewController 中,当需要将数据传回 Page1 时,使用代理方法:

// Page4ViewController.m

#import "Page4ViewController.h"

@implementation Page4ViewController

- (void)updateValueAndNotifyDelegate {
    NSString *updatedValue = @"New Value";
    if ([self.delegate respondsToSelector:@selector(page4ViewControllerDidUpdateValue:)]) {
        [self.delegate page4ViewControllerDidUpdateValue:updatedValue];
    }
    // 其他逻辑处理...
}

@end

这样,当 Page4 更新一个值并需要通知 Page1 时,它就会调用代理方法。由于 Page1、Page2 和 Page3 将代理正确地传递下去,Page1 将能够接收并处理从 Page4 发来的数据。

除了代理,其实还可以用通知或者 block 也可以,不过亲测的话,代理更加高效。

零散知识点,仅做记录!

标签:Page1ViewController,多级,Page4ViewController,iOS,代理,delegate,import,Page2ViewContr
From: https://blog.51cto.com/u_13188203/9400129

相关文章

  • IOS申请证书步骤
    保姆级苹果个人开发者账号、企业开发者账号ios证书申请流程和签名步骤 苹果开发者网站的申请就不做介绍了,进入苹果开发者网站会员中心一、钥匙串申请MAC上打开钥匙串 点击后,输入相应的信息;然后点击保存到磁盘; 文件扩展名为cerSigningRequest;最终生成文件如下 二、......
  • 前端性能测试 - 页面运行性能测试场景拓展
    前言对于前端场景复杂且需保持常态开启的页面(例如在线表格、高频大屏),客户在实际应用场景中长时间使用会很容易出现性能问题。但是在测试场景下,并不是那么容易观察到,为了更好的评估和描述出现的问题,当前主要对页面性能场景作以下分类:下载页面性能表现运行时性能表现这篇文章主要跟大......
  • 2024最新iOS17.3微信分身详解分享
    微信是目前最流行的社交软件之一,拥有庞大的用户群体。然而,对于一些需要同时使用多个微信账号的用户来说,使用官方版微信就显得有些不方便。iOS分身微信软件可以解决这个问题,它可以让用户在同一台设备上同时登录多个微信账号,从而实现工作生活两不误。iOS分身微信软件的优势iOS分身微......
  • 使用rpa打开浏览器并执行js抓取页面元素详情步骤
    这里我们专门开一个文章来写如何在rpa中执行js获取页面元素。个人觉得,复杂点的需求用js会方便很多,所以后续的文章我都会重点使用js去获取页面元素。好,正文开始,我们先看一下rpa为我们提供的自带的方便的抓取元素的方式,我们还是以小红书为例,还是以上一个例子为例,上个例子我们使......
  • 在TypeScript项目中搭配Axios封装后端接口调用
    前言本来是想发next.js开发笔记的,结果发现里面涉及了太多东西,还是拆分出来发吧~本文记录一下在TypeScript项目里封装axios的过程,之前在开发StarBlog-Admin的时候已经做了一次封装,不过那时是JavaScript,跟TypeScript还是有些区别的。另外我在跟着next.js文档开发的......
  • vue3 axios 封装
    一、介绍二、代码三、问题 一、介绍Axios是一个基于promise的HTTP库,可以用在浏览器和node.js中。这里介绍的是在vue3中怎么封装二、代码1.基本使用1.1安装npminstallaxios1.2简单使用1.2.1局部使用importaxiosfrom'axio......
  • 页面布局
    页面布局1.弹性盒子布局配套属性:flex-direction:作用对象:弹性盒子设置弹性盒子内子元素的排列方向其中有:row(横向,默认)column(竖着)row-reverse(反向横着)column-reverse(反向竖着)flex-wrap:作用对象:弹性盒子设置弹性盒子内的子元素是否换行,其中有:nowrap(不换行,默认)w......
  • 使用递归解决嵌套页面的状态改变
    场景一个注销页,里面有四种状态。注销说明页输入手机号码和图形验证码输入短信验证码注销处理中在每一个状态中,都需要被APP调用window.jumpOther()返回到上一个状态<template><divv-if="pageStatus.isDelete"></div><divv-if="pageStatus.isInputPhone"></div......
  • npm ERR! request to https://registry.npm.taobao.org/axios failed, reason: certif
    前言一直使用npmbuild没问题的,突然出现报错:npmWARNinstallUsageofthe`--dev`optionisdeprecated.Use`--only=dev`instead.npmERR!codeCERT_HAS_EXPIREDnpmERR!errnoCERT_HAS_EXPIREDnpmERR!requesttohttps://registry.npm.taobao.org/axiosfailed,......
  • 使用 FreeMarker 生成静态页面
    在项目开发中,对于一些访问量较大的页面,可以提前基于数据生成静态页面,当数据有变化时再重新生成并更新静态页面,这样可以减轻数据库压力,提高网站的并发访问效率。常用的技术就是使用FreeMarker模板引擎,它是一款高性能的,基于模板和数据,生成输出文本的通用工具。本篇博客基于FreeM......