iOS-跨界面?zhèn)髦岛涂鐟?yīng)用傳值

跨界面?zhèn)髦?/strong>

從一個(gè)界面將一個(gè)結(jié)果值傳到另一個(gè)界面,這個(gè)是我們?cè)陂_(kāi)發(fā)過(guò)程中非常常見(jiàn)的一個(gè)問(wèn)題。傳值本身并不是一個(gè)太復(fù)雜的問(wèn)題元媚,在此主要簡(jiǎn)述一下常用的傳值方法。

我們傳值常用的方法主要有四種:

1.屬性傳值
2.代理傳值
3.block傳值
4.通知傳值
5.KVO
6.對(duì)象傳值

屬性傳值
屬性傳值應(yīng)該來(lái)說(shuō)是比較簡(jiǎn)單的一種傳值方式苗沧,但是這種傳值方式有其局限性惠毁,常用的一種場(chǎng)合是我們從界面A跳轉(zhuǎn)到界面B,如何我們想講界面A的值傳到界面B,屬性傳值是比較方便的一種方式崎页。如下圖所示,如果我們點(diǎn)擊A界面上的一個(gè)按鈕腰埂,跳轉(zhuǎn)到B界面飒焦,并且把A界面的一個(gè)值傳送到B界面。

先說(shuō)明一下大致的原理屿笼,首先要?jiǎng)?chuàng)建兩個(gè)控制器A和B牺荠,在A中導(dǎo)入B的頭文件,在A的按鈕點(diǎn)擊事件中驴一,添加A跳轉(zhuǎn)到B的代碼段⌒荽疲現(xiàn)在的問(wèn)題是如何在跳轉(zhuǎn)的過(guò)程中把A界面上的值傳到B界面呢?

我們可以給B添加一個(gè)屬性肝断,在點(diǎn)擊按鈕從A跳轉(zhuǎn)到B的時(shí)候杈曲,將A界面要傳送的值賦給B的屬性,這樣在B界面可以使用(self.屬性)直接獲取從A界面?zhèn)鬟^(guò)來(lái)的值胸懈。

代理傳值
代理傳值對(duì)應(yīng)初學(xué)者來(lái)說(shuō)有一點(diǎn)難度担扑,但是多使用幾次就好了,像在系統(tǒng)中我們代理這種設(shè)計(jì)使用的非常廣泛趣钱,在此主要說(shuō)明使用代理傳值的方法涌献。我們?cè)陧?yè)面跳轉(zhuǎn)的過(guò)程中,將借助于導(dǎo)航首有,使用push從A界面跳轉(zhuǎn)到B界面燕垃,使用pop從B界面返回到A界面枢劝。

現(xiàn)在我們假設(shè)一種場(chǎng)景,我們需要從界面A傳值到界面B卜壕,同時(shí)也要從界面B傳值到界面A,如何使用代理來(lái)實(shí)現(xiàn)呢您旁?

首先使用代理傳值,我們需要知道怎么自定義代理印叁,首先先普及一下代理的相關(guān)知識(shí)被冒。

假如我們需要在A界面?zhèn)髦档紹界面,我們需要在A界面中定義一些協(xié)議方法轮蜕,只需要聲明方法即可昨悼,不需要實(shí)現(xiàn),如果其他類(lèi)想要訪問(wèn)這些協(xié)議方法跃洛,只需要遵守這些協(xié)議即可率触。在A中定義的協(xié)議方法,相當(dāng)于一個(gè)接口汇竭,你想使用A的接口葱蝗,就要遵守A的協(xié)議方法,例如在B中细燎,想要訪問(wèn)A的協(xié)議方法两曼,B就要遵守A的協(xié)議。傳值的話玻驻,B從A的協(xié)議方法中就能獲取到A界面中的值悼凑。

假如你向從界面B,pop到界面A璧瞬,并把界面B的值傳到界面A户辫,這種使用屬性傳值不太方便,使用代理可以解決嗤锉,從B界面往A傳值渔欢,協(xié)議方法應(yīng)該在B中寫(xiě)明,在A中遵守協(xié)議瘟忱。

block傳值
使用block傳值奥额,我們需要自定義代理,這種寫(xiě)法相對(duì)來(lái)說(shuō)是比較麻煩的酷誓,使用block傳值的話披坏,會(huì)使得代碼量大大縮減,現(xiàn)在我們假設(shè)我們要把界面A上的值傳到界面B盐数,使用block來(lái)實(shí)現(xiàn)棒拂。

通知傳值
通知傳值有點(diǎn)類(lèi)似于廣播,有發(fā)送者,有監(jiān)聽(tīng)者帚屉,比如A想接受B的值谜诫,B要發(fā)送一個(gè)通知,A只要監(jiān)聽(tīng)這個(gè)通知攻旦,就能接收到值喻旷,通知傳值就不細(xì)述。

例如發(fā)送一個(gè)通知:

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center postNotificationName:通知名字 object:self userInfo:傳遞參數(shù)];

接收一個(gè)通知:

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];

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

-(void)receiveNofitication:(NSNotification *)notification
{//接收到通知牢屋,執(zhí)行相關(guān)代碼}

跨應(yīng)用傳值
跨頁(yè)面跳轉(zhuǎn)且预,顧名思義就是在一個(gè)應(yīng)用內(nèi)不同界面之間的跳轉(zhuǎn),如果我們想要從一個(gè)應(yīng)用程序跳轉(zhuǎn)到另一個(gè)應(yīng)用程序怎么辦,加入你的手機(jī)上同時(shí)安裝了淘寶和支付寶兩個(gè)應(yīng)用程序烙无,你點(diǎn)擊支付的時(shí)候锋谐,手機(jī)會(huì)自動(dòng)打開(kāi)手機(jī)上安裝的應(yīng)用支付寶,這個(gè)功能如何實(shí)現(xiàn)截酷。
想要跨應(yīng)用跳轉(zhuǎn)涮拗,我們首先要確保手機(jī)上安裝了這兩個(gè)應(yīng)用,或者模擬器上安裝了這兩個(gè)應(yīng)用迂苛,然后點(diǎn)擊控件觸發(fā)事件實(shí)現(xiàn)不同應(yīng)用之間的跳轉(zhuǎn)三热。
我們先要分析一下如何實(shí)現(xiàn)這個(gè)功能:
如果我們從一個(gè)應(yīng)用跳轉(zhuǎn)到另一個(gè)應(yīng)用,我們需要有另一個(gè)應(yīng)用的標(biāo)示三幻,我們應(yīng)該稱(chēng)之為URL就漾,點(diǎn)擊響應(yīng)事件,跳轉(zhuǎn)到另一個(gè)應(yīng)用即可念搬。

 如何給應(yīng)用設(shè)置URL:TAGGET->Info->URL Types->URL Schemes
 在里面輸入標(biāo)示即可从藤。

 現(xiàn)在假設(shè)我在模擬器上安裝了兩個(gè)應(yīng)用,一個(gè)叫BuyApp,設(shè)置標(biāo)示為buy,一個(gè)叫PayApp,設(shè)置標(biāo)示為pay.

現(xiàn)在我需要點(diǎn)擊按鈕锁蠕,跳轉(zhuǎn)到支付界面。(并且在跳轉(zhuǎn)的時(shí)候傳遞兩個(gè)參數(shù))
現(xiàn)在我們已經(jīng)知道支付界面的URL是pay.
我們可以在按鈕點(diǎn)擊事件中寫(xiě)入下面的代碼即可:
應(yīng)用跳轉(zhuǎn)
現(xiàn)在我們已經(jīng)進(jìn)入到PayApp懊蒸,如何在這個(gè)應(yīng)用中接受傳過(guò)來(lái)的參數(shù)呢荣倾?

我們可以在AppDelegate這個(gè).m文件中添加下面的方法:

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

當(dāng)前應(yīng)用程序被別的應(yīng)用程序喚醒時(shí),執(zhí)行此方法骑丸。
參數(shù)分別是:
URL:程序跳轉(zhuǎn)的連接地址
sourceApplication:從哪個(gè)應(yīng)用程序跳轉(zhuǎn)過(guò)來(lái)舌仍。
我們可以從程序跳轉(zhuǎn)的連接地址中提取出傳遞過(guò)來(lái)的參數(shù)。這樣在第二個(gè)應(yīng)用中能夠獲取到第一個(gè)應(yīng)用傳遞過(guò)來(lái)的參數(shù)通危。
如果我們?cè)赑ayApp界面執(zhí)行完畢后铸豁,返回到原程序,執(zhí)行方法與上面的步驟相同菊碟。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末节芥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌头镊,老刑警劉巖蚣驼,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異相艇,居然都是意外死亡颖杏,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)坛芽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)留储,“玉大人,你說(shuō)我怎么就攤上這事咙轩』窕洌” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵臭墨,是天一觀的道長(zhǎng)赔嚎。 經(jīng)常有香客問(wèn)我,道長(zhǎng)胧弛,這世上最難降的妖魔是什么尤误? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮结缚,結(jié)果婚禮上损晤,老公的妹妹穿的比我還像新娘。我一直安慰自己红竭,他們只是感情好尤勋,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著茵宪,像睡著了一般最冰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上稀火,一...
    開(kāi)封第一講書(shū)人閱讀 52,246評(píng)論 1 308
  • 那天暖哨,我揣著相機(jī)與錄音,去河邊找鬼凰狞。 笑死篇裁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的赡若。 我是一名探鬼主播达布,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼逾冬!你這毒婦竟也來(lái)了黍聂?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎分冈,沒(méi)想到半個(gè)月后圾另,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡雕沉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年集乔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坡椒。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡扰路,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出倔叼,到底是詐尸還是另有隱情汗唱,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布丈攒,位于F島的核電站哩罪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏巡验。R本人自食惡果不足惜际插,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望显设。 院中可真熱鬧框弛,春花似錦、人聲如沸捕捂。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)指攒。三九已至慷妙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間允悦,已是汗流浹背景殷。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留澡屡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓咐旧,卻偏偏與公主長(zhǎng)得像驶鹉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子铣墨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,280評(píng)論 25 707
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理室埋,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,696評(píng)論 18 139
  • *面試心聲:其實(shí)這些題本人都沒(méi)怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來(lái)就是把...
    Dove_iOS閱讀 27,160評(píng)論 30 470
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程姚淆,因...
    小菜c閱讀 6,444評(píng)論 0 17
  • 七天之后孕蝉,我就要走了 我不會(huì)再可憐巴巴的等你的回應(yīng)了 我要去一個(gè)沒(méi)有我們的地方 然后把一切都拋灑掉 我不會(huì)再和別人...
    梵夜閱讀 272評(píng)論 0 1