美文网首页
iOS-跨界面传值和跨应用传值

iOS-跨界面传值和跨应用传值

作者: rayChow | 来源:发表于2017-02-14 16:25 被阅读180次

跨界面传值

从一个界面将一个结果值传到另一个界面,这个是我们在开发过程中非常常见的一个问题。传值本身并不是一个太复杂的问题,在此主要简述一下常用的传值方法。

我们传值常用的方法主要有四种:

1.属性传值
2.代理传值
3.block传值
4.通知传值
5.KVO
6.对象传值

属性传值
属性传值应该来说是比较简单的一种传值方式,但是这种传值方式有其局限性,常用的一种场合是我们从界面A跳转到界面B,如何我们想讲界面A的值传到界面B,属性传值是比较方便的一种方式。如下图所示,如果我们点击A界面上的一个按钮,跳转到B界面,并且把A界面的一个值传送到B界面。

先说明一下大致的原理,首先要创建两个控制器A和B,在A中导入B的头文件,在A的按钮点击事件中,添加A跳转到B的代码段。现在的问题是如何在跳转的过程中把A界面上的值传到B界面呢?

我们可以给B添加一个属性,在点击按钮从A跳转到B的时候,将A界面要传送的值赋给B的属性,这样在B界面可以使用(self.属性)直接获取从A界面传过来的值。

代理传值
代理传值对应初学者来说有一点难度,但是多使用几次就好了,像在系统中我们代理这种设计使用的非常广泛,在此主要说明使用代理传值的方法。我们在页面跳转的过程中,将借助于导航,使用push从A界面跳转到B界面,使用pop从B界面返回到A界面。

现在我们假设一种场景,我们需要从界面A传值到界面B,同时也要从界面B传值到界面A,如何使用代理来实现呢?

首先使用代理传值,我们需要知道怎么自定义代理,首先先普及一下代理的相关知识。

假如我们需要在A界面传值到B界面,我们需要在A界面中定义一些协议方法,只需要声明方法即可,不需要实现,如果其他类想要访问这些协议方法,只需要遵守这些协议即可。在A中定义的协议方法,相当于一个接口,你想使用A的接口,就要遵守A的协议方法,例如在B中,想要访问A的协议方法,B就要遵守A的协议。传值的话,B从A的协议方法中就能获取到A界面中的值。

假如你向从界面B,pop到界面A,并把界面B的值传到界面A,这种使用属性传值不太方便,使用代理可以解决,从B界面往A传值,协议方法应该在B中写明,在A中遵守协议。

block传值
使用block传值,我们需要自定义代理,这种写法相对来说是比较麻烦的,使用block传值的话,会使得代码量大大缩减,现在我们假设我们要把界面A上的值传到界面B,使用block来实现。

通知传值
通知传值有点类似于广播,有发送者,有监听者,比如A想接受B的值,B要发送一个通知,A只要监听这个通知,就能接收到值,通知传值就不细述。

例如发送一个通知:

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center postNotificationName:通知名字 object:self userInfo:传递参数];

接收一个通知:

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];

[center addObserver:self selector:@selector(receiveNofitication:) name:通知名字 object:nil];

-(void)receiveNofitication:(NSNotification *)notification
{//接收到通知,执行相关代码}

跨应用传值
跨页面跳转,顾名思义就是在一个应用内不同界面之间的跳转,如果我们想要从一个应用程序跳转到另一个应用程序怎么办,加入你的手机上同时安装了淘宝和支付宝两个应用程序,你点击支付的时候,手机会自动打开手机上安装的应用支付宝,这个功能如何实现。
想要跨应用跳转,我们首先要确保手机上安装了这两个应用,或者模拟器上安装了这两个应用,然后点击控件触发事件实现不同应用之间的跳转。
我们先要分析一下如何实现这个功能:
如果我们从一个应用跳转到另一个应用,我们需要有另一个应用的标示,我们应该称之为URL,点击响应事件,跳转到另一个应用即可。

 如何给应用设置URL:TAGGET->Info->URL Types->URL Schemes
 在里面输入标示即可。

 现在假设我在模拟器上安装了两个应用,一个叫BuyApp,设置标示为buy,一个叫PayApp,设置标示为pay.

现在我需要点击按钮,跳转到支付界面。(并且在跳转的时候传递两个参数)
现在我们已经知道支付界面的URL是pay.
我们可以在按钮点击事件中写入下面的代码即可:
应用跳转
现在我们已经进入到PayApp,如何在这个应用中接受传过来的参数呢?

我们可以在AppDelegate这个.m文件中添加下面的方法:

 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 

当前应用程序被别的应用程序唤醒时,执行此方法。
参数分别是:
URL:程序跳转的连接地址
sourceApplication:从哪个应用程序跳转过来。
我们可以从程序跳转的连接地址中提取出传递过来的参数。这样在第二个应用中能够获取到第一个应用传递过来的参数。
如果我们在PayApp界面执行完毕后,返回到原程序,执行方法与上面的步骤相同。

相关文章

  • iOS-跨界面传值和跨应用传值

    跨界面传值 从一个界面将一个结果值传到另一个界面,这个是我们在开发过程中非常常见的一个问题。传值本身并不是一个太复...

  • iOS 六种基本的传值方式

    1、属性传值 利:正向传值、简单单一 弊:不能反向传值,也不能 跨页面传值 NextViewController*...

  • iOS 如何优雅地跨层通信

    1. 传值 (数据传递) 传值在程序开发中使我们每天需要面临的问题传值方式: 正向传值,逆向传值,跨层传值...一...

  • swift 组件式开发 跨组件正向传值和回传以及返回方式

    现在负责的项目是组件式开发,涉及到了跨组件传值和返回传值以及跳转问题 问题描述: 正向传值和反向传值如何实现 直接...

  • 组件通信

    vue传值可分为父子之间传值、兄弟组件之间传值、跨代组件之间传值 1.父子之间传值:可以使用$emit/props...

  • 关于微信小程序页面传值

    方向: 1,跨页面传值 2,input输入框值得获取方式 进程: 1,跨页面传值方式 ->借由navigatio...

  • IOS开发 多界面传值

    本节学习内容: 1.多界面传值的基本概念 2.多界面传值的方法 3.多界面传值的应用 【多界面传值 属性】 cha...

  • 微信小程序 页面传值详解

    微信小程序 页面传值详解 一. 跨页面传值. 1 . 用 navigator标签传值或 wx.navigator,...

  • CLR与AppDomain

    装载与卸载 跨域传值 按值封送 按引用封送

  • iOS中界面传值的几种方式

    1.属性传值 属性传值适用于顺序传值,从前面的界面传值给后面的界面。 2.代理传值 用代理的方式实现界面间传值稍微...

网友评论

      本文标题:iOS-跨界面传值和跨应用传值

      本文链接:https://www.haomeiwen.com/subject/mfaxwttx.html