控制器之间的数据传递——代理传值

人工势场法在自动驾驶避障中的实践与优化 本文深入探讨了人工势场法在自动驾驶避障中的核心原理与实践优化。通过解析引力与斥力模型,揭示了经典算法在局部最优和目标不可达等问题上的局限性,并重点介绍了改进斥力场函数、引入道路边界斥力及动态参数调整等关键优化策略,有效提升了该局部路径规划算法在复杂动态场景下的实用性与鲁棒性。 阅读详情

代理传值

我们先在这里约定:界面1传值到界面2为顺传,界面2传值到界面1为逆传

一般用代理传值是为了降低视图控制器之间的耦合度,主要用于逆序传值。

对于属性传值,传递方必须要有一个保存接收方的属性,而代理传值不需要知道接收方是谁,只要其代理遵守代理协议,就可以获取通过代理方法传出的数据模型

一. 实现步骤

  1. 界面2实现一个代理协议

  2. 界面2设置一个代理属性

  3. 界面2通知其代理做事情

  4. 界面2在入栈之前,设置界面1为其代理

  5. 界面1实现代理方法,实现传值

二. 具体代码

1. AppDelegate类

---------- AppDelegate.m文件

#import "AppDelegate.h"
#include "OneViewController.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

  // 1. 创建窗口
  self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

  // 2. 创建窗口的根控制器
  // 2.1 创建导航控制器的根控制器
  UIViewController *oneVc = [[OneViewController alloc] init];
  // 2.2 创建导航控制器
  UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:oneVc];
  // 2.3 给窗口设置根控制器
  self.window.rootViewController = nav;

  // 3. 设置窗口为主窗口并显示窗口
  [self.window makeKeyAndVisible];

  // 隐藏导航控制器的导航条
  nav.navigationBarHidden = YES;

  return YES;
}

@end

2. OneViewController类

---------- OneViewController.m文件

#import "OneViewController.h"
#import "TwoViewController.h"

@interface OneViewController ()<TwoViewControllerDelegate>

@property (nonatomic,strong) UITextField *textField;

@end

@implementation OneViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  //设置控制器View的背景颜色
  self.view.backgroundColor = [UIColor greenColor];

  // 创建点击按钮
  UIButton *clickBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  clickBtn.frame = CGRectMake(10, 100, 80, 40);
  clickBtn.backgroundColor = [UIColor whiteColor];
  [clickBtn setTitle:@"到界面2" forState:UIControlStateNormal];
  [clickBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
  [clickBtn setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
  [clickBtn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];
  [self.view addSubview:clickBtn];

  // 创建文本框
  _textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 150, 250, 40)];
  _textField.borderStyle = UITextBorderStyleRoundedRect;
  _textField.backgroundColor = [UIColor whiteColor];
  [self.view addSubview:_textField];

}

#pragma mark - 点击事件

- (void)btnClick {

  // 创建界面2,并压入栈
  TwoViewController *twoVc = [[TwoViewController alloc] init];
  [self.navigationController pushViewController:twoVc animated:YES];

  // 设置界面2的代理
  twoVc.delegate = self;

}

#pragma mark - 实现代理方法

- (void)twoViewController:(TwoViewController *)vc andString:(NSString *)str {
  _textField.text = str;
}

@end

3. TwoViewController类

---------- TwoViewController.h文件

#import <UIKit/UIKit.h>

#pragma mark - TwoViewController代理协议
@class TwoViewController;

@protocol TwoViewControllerDelegate <NSObject>

@optional
- (void)twoViewController:(TwoViewController *) vc andString:(NSString *)str;

@end

#pragma mark - TwoViewController控制器声明

@interface TwoViewController : UIViewController

// 代理
@property (nonatomic,weak) id<TwoViewControllerDelegate> delegate;

@end

---------- TwoViewController.m文件

#import "TwoViewController.h"

@interface TwoViewController ()

@property (nonatomic,strong) UITextField *textField;

@end

@implementation TwoViewController

- (void)viewDidLoad {
    [super viewDidLoad];

  //设置控制器View的背景颜色
  self.view.backgroundColor = [UIColor yellowColor];

  // 创建点击按钮
  UIButton *clickBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  clickBtn.frame = CGRectMake(10, 100, 80, 40);
  clickBtn.backgroundColor = [UIColor whiteColor];
  [clickBtn setTitle:@"传 值" forState:UIControlStateNormal];
  [clickBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
  [clickBtn setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
  [clickBtn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];
  [self.view addSubview:clickBtn];

  // 创建文本框
  _textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 150, 250, 40)];
  _textField.borderStyle = UITextBorderStyleRoundedRect;
  _textField.backgroundColor = [UIColor whiteColor];
  [self.view addSubview:_textField];
}

#pragma mark - 点击事件

- (void)btnClick {

  // 通知代理做事情
  if ([_delegate respondsToSelector:@selector(twoViewController:andString:)]) {
    [_delegate twoViewController:self andString:_textField.text];
  }

  // 跳转界面
  [self.navigationController popViewControllerAnimated:YES];

}

@end
【昇腾】用MindIE(服务化方式)拉起glm4-9b-chat模型问题解决 【昇腾】用MindIE拉起glm4-9b-chat模型问题解决: LLMInferEngine failed to init LLMInferModels ERR: Failed to init endpoint! Please check the service log or console output. Killed make sure the folder's owner has execute permission. 阅读详情

相关推荐

ENVI哨兵一号数据处理

使用ENVI+SarScape处理哨兵数据

Rjjjjj11的博客 2万+

控制器之间的传值

一:顺传 1, 传值第一步:搞一个成员变量接受   第二部:拿到控制器 2,segue底层做的事:1,根据Identifier去找线,创建segue对象                                      2,设置来源控制器segue.souceC = self ;                                      3,新建

LeaderQiu的专栏 1175

使用基于物质点法(MPM)的Anura3D模拟沙柱坍塌

本博客使用开源软件Anura3D软件模拟了一个沙柱坍塌的过程,这个软件是基于基于物质点法(MPM)设计的

weixin_59902634的博客 4042

控制器之间的数据传递——属性传值

一、属性传值 我们先在这里约定:界面1传值到界面2为顺传,界面2传值到界面1为逆传 (一). 顺传 界面2需要有一个用于接收数据的属性 界面2在压入栈之前,把界面1中的数据直接赋值给界面2的属性 界面2压入栈,实现跳转到界面2 (二). 逆传 界面1需要有一个用于接收数据的属性 界面2需要有一个用于保存界面1的属性 界面2在压入栈之前,把界面1控制器赋值给界面2的属性 在界

诠释完美 2822

推荐国内可使用的chatGPT的工具

是基于ChatGPT 3.5和ChatGPT 4开发的chatGPT应用程序版,这个应用可以直接使用而不需要魔法,如果我们有自己的APT KEY的话可以一直使用,但是如果没有的话,我们只能使用ChatGPT 3.5 版本的,次数也是有所限制,应该是20次每天,这也足够我们的使用了,响应的速度也是非常的快。

有你真好的博客 1万+

若依前后端分离版实战:MQTT集成保姆级教程(含MQTTX测试工具使用)

本文详细介绍了在若依前后端分离架构中集成MQTT协议的完整流程,包括环境搭建、核心配置、安全实践及性能优化。通过MQTTX测试工具的使用和实战代码示例,帮助开发者快速实现物联网场景下的实时通信功能,提升系统稳定性和效率。

weixin_30664051的博客 456

控制器之间的数据传递——Block传值

Block传值 我们先在这里约定:界面1传值到界面2为顺传,界面2传值到界面1为逆传 一般用Block传值是为了降低视图控制器之间的耦合度,和代理传值类似主要用于逆序传值。 一. 实现步骤: 给界面2定义一个Block属性;注意:在block传值中,要传几个值,block就有几个参数,参数要与传的值对应 在界面2的跳转方法中检查block属性是否有值,有值就执行block,然后界面2出栈

诠释完美 1975

分享一个完整的KANO问卷(包含正反问题和选项设置)

本文介绍了KANO模型问卷的设计与应用,用于评估功能需求优先级。问卷包含基本信息、功能评估(正反问题设计)、界面评估及开放问题,选项定义明确(如"非常喜欢"到"很不喜欢")。数据清洗规则包括剔除矛盾回答和注意力检验。通过量化编码和矩阵分析,将需求分为魅力型、期望型、必备型等类别。示例数据显示健康监测为必备型(72%),电子围栏为期望型(45%),适老化改造为无差异型(38%)。该模型为产品决策提供客观量化依据。

从技术实践立足,从项目管理方法论延伸思考 1794

两个控制器之间8种传值的方式:

1.单例  2.通知  3.代理 4.在viewwilldisappear方法中传值 5.uiapplication是单例 通过这个取出控制器然后传值 6.block代码块(注意相互引用的问题)将代码块设置为属性 7.KVO 8.storyBoard进行传值 利用加载两个视图控制器要先加载中间连线的性质

ft6206的博客 1688

【软考高级架构】案例题考前突击6——大数据架构

前一类的数据主要由流量方以接口的方式提供(比如对接的腾讯广点通平台),后一类则是某网特有的数据,通过买家的浏览、下单、付款日志算出来。1. 在数据层面只维护一张包含所有指标的MySQL表,表中的stday字段作为索引,stday=当天的保存实时数据,stday<当天的保存离线数据。典型的大数据架构,除了Lambda架构之外,还有kappa架构,这两个架构的区别如下标所示,请补充表中空(1)-(4)第二,实时数据只对接了内部的kafka消息,没有实时的获取第三方的曝光、点击、浏览数据。

qq837993702的博客 66

AI实时盯盘与素材更新迭代功能开发——千川素材投流系统完全指南

《AI驱动的千川素材投流系统完全指南》摘要 本文针对抖音电商生态中巨量千川平台的素材投放挑战,提出了一套AI驱动的实时盯盘与素材更新迭代解决方案。系统通过分层架构设计,整合数据采集、实时监控、AI分析和自动化执行模块,实现分钟级数据追踪与智能决策。核心功能包括实时数据采集、异常检测、自动化投放调整和素材生命周期管理,有效解决人工盯盘效率低、素材生命周期短、决策响应慢等痛点。系统采用Python+FastAPI技术栈,结合机器学习和自动化工具,提供从数据采集到决策执行的全链路解决方案,帮助商家提升投放效率和R

huanghm88的专栏 229

ios 之页面传值的几种方式

第二个视图控制器如何获取第一个视图控制器的部分信息 例如 :第二个界面中的lable显示第一个界面textField中的文本 这就需要用到属性传值、block传值 那么第一个视图控制器如何获的第二个视图控制器的部分信息 例如:第一个界面中的lable显示第二个界面textField中的文本 这就需要使用代理传值 页面间传值有八大传值方式,下面我们就简单介绍下页面间常用的五...

baji615346的专栏 126

【ARM Trace32(劳特巴赫) 使用介绍 13 -- Trace32 Var 变量篇】

例如我们已经知道一个符号(可能是变量或者函数)的地址,怎么确定这个地址是一个变量还是一个函数呢?如果是变量的话,变量名是啥?变量定义的位置在哪?如果是函数,函数名是啥?函数定义的位置又在哪呢?查看结构体变量 str_t32 的值。例如我们已经知道了一个符号的地址为。在map文件中的地址为。

CodingCos的博客 2349

iOS详细解析视图控制器的正向和逆向传值

本文主要介绍在不同的视图控制器之间进行传值,分为两种传值方式,正向传值比较容易,逆向传值相对于正向来说麻烦一点,需要使用代理或者是block

nineteen_的博客 1979

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IOS 代理协议传值

顺传 假设A为第一个视图控制器,B为第二个视图控制器 在A中导入B的.h文件 场景:A向B传值 第一步:在B的.h中定义一个content属性 @interfaceSecondViewController:UIViewController@property(nonatomic,copy)NSString*contents;@end 第二步:在点击A中的按钮方法里面给B的c...

anita11111的博客 152

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

iOS 页面间几种传值方式(属性,代理,block,单例,通知)

第二个视图控制器如何获取第一个视图控制器的部分信息 例如 :第二个界面中的lable显示第一个界面textField中的文本 这就需要用到属性传值、block传值 那么第一个视图控制器如何获的第二个视图控制器的部分信息 例如:第一个界面中的lable显示第二个界面textField中的文本 这就需要使用代理传值 页面间传值有八大传值方式,下面我们就简单介绍...

aqlomr7170的博客 100

iOS Delegate(代理)传值~demo

//联系人:石虎  QQ: 1224614774昵称:嗡嘛呢叭咪哄 /** 注意点: 1.看 GIF 效果图.        2.看连线视图的效果图.        3.看实现代码(直接复制实现效果). */ 一、GIF 效果图: 二、连线视图的效果图: 图1: 图2:

石虎 2611

iOS 页面传值总结

1、属性传值 (1):属性传值第一步需要用到什么类型就定义什么样的属性 (2):从上一个页面到一个页面的选中方法里面将要传的值传到来(上一个页面)备注:这种方法只适用于上一个页面推到下一个页面。 如:MainViewController与SecondViewContr...

chuxuelie4798的博客 113

第一篇:iOS_控制器之间传值

第一篇:iOS_控制器之间传值 一。利用代理   A要把自己的值传给B,由B来显示,由B来处理:那么A要定义代理,在A.h中定义,在A.m中把要传的值放在代理方法里面传给B;   B实现A的代理,在实现A代理方法里面,接收A代理方法中传过来的属性值;由B的控件展示;   如果是B想把自己的值传给A,就把上面的角色换一下。 ...

weixin_33790053的博客 76

iOS中的数据传递

(以A控制器->B控制器->C控制器的页面传值为例) 顺传 顺传就是在A控制器跳转至B控制器时,获取到B控制器中需要赋值的属性,对该属性进行赋值,当控制器完成跳转后,就完成了值的传递。 注意:对于跨级控制器的跳转,如A控制器与C控制器之间还有一个B控制,要将A控制器的值传到C控制器,不能使用顺传,可以使用通知。 逆传 逆传就...

dkaq53672的博客 208

IOS的四种传值方式

在IOS界面跳转中,通常需要传值来解决一些实际问题,比如A界面跳转B界面时,需要告诉B界面显示那些内容。B界面做了某些操作之后,A界面需要做一些其他的操作等等。这些操作的数据来往,我们可以看做它在传值,所以传值不是我们一般意义的传一些数值过去,而是一些数据,可以是一些字符串,一个数组,某种状态等等。 在介绍之前,先奉上自己做的Demo:https://github.com/LOLR2017/ByValDemo iOS界面间的传值方式大概可以分为以下四种: 1.正向传值...

feelinghappy的专栏 702

IOS-界面传值

第二个视图控制器如何获取第一个视图控制器的部分信息 例如 :第二个界面中的lable显示第一个界面textField中的文本 这就需要用到属性传值、block传值 那么第一个视图控制器如何获的第二个视图控制器的部分信息 例如:第一个界面中的lable显示第二个界面textField中的文本 这就需要使用代理传值 页面间传值有八大传值方式,下面我们就简单介绍下页面间常用的五种传值方式...

weixin_34392843的博客 87

UI 多个视图控制器(UIViewController)间的 协议传值

1 #import <UIKit/UIKit.h> 2 3 4 5 //1.协议传值 6 7 // 协议由后面的视图控制器制定 8 9 @protocol secondDelegate <NSObject> 10 11 12 13 //协议的方法需要带一个或多个参数 14 ...

baang3306的博客 131
上一篇: 控制器之间的数据传递——属性传值
下一篇: 控制器之间的数据传递——Block传值
活在生活里
博客等级 码龄11年 94粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值