1. 程式人生 > >使用通知機制,在dismissViewControllerAnimated後,completion傳值給上一個父檢視方法

使用通知機制,在dismissViewControllerAnimated後,completion傳值給上一個父檢視方法

檢視firstView和secendView,點選firstView上面的按鈕presentviewcontroller出secendView;secendView上有個按鈕,點選按鈕dismissViewControllerAnimated,並將某個值傳給firstView,或不直接在firstView裡面的viewWillAppear裡面呼叫方法,而是直接通過在dismissViewControllerAnimated completion裡面編輯程式碼塊呼叫firstView裡面的任何方法,該怎麼做?

這個問題其實並不複雜,如果你知道如何使用NSNotificationCenter實現起來還是非常簡單的。



先說一下,secendView在dismissViewControllerAnimated後,如何在進入firstView後,自動呼叫firstView裡面的任何方法
第一步:在secendView裡面,點選按鈕時呼叫一個方法,該方法為:
-(void)secendAction{
[self dismissViewControllerAnimated:YES completion:^{
        [[NSNotificationCenter defaultCenter] postNotificationName:@"do" object:self];
    }];

}
上面程式碼是將secendView dismissViewControllerAnimated掉,然後自動註冊一個名為do的通知

註冊了這個名為的通知,你就可以在任何.m檔案裡面通過以下程式碼呼叫到了:
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self
           selector:@selector(handleColorChange:)
               name:@"do"
             object:nil];
上面的程式碼的意思就是,先找到已經註冊過的名為do的通知,然後再自動呼叫handleColorChange去處理,
所以:
第二步:在firstView裡面的viewWillAppear方法裡面寫入以下程式碼:

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self
           selector:@selector(handleColorChange:)
               name:@"do"
             object:nil];
handleColorChange方法為:
-(void)handleColorChange:(id)sender{
[self firstView裡面方法]

看明白了吧?在secendView裡面我們不直接呼叫firstView裡面的方法,而是通過通知來讓firstView自動呼叫自己裡面的某個方法。
通過通知可以讓不同.m檔案之間進行方法和引數的傳遞

ok就下來說一下如何在dismissViewControllerAnimated後將secendView裡面的值傳遞給firstView
第一步:在secendView裡面,點選按鈕時呼叫一個方法,該方法為:
-(void)secendAction{
[self dismissViewControllerAnimated:YES completion:^{
        [tools showToast:@"圖片資訊提交成功" withTime:1500 withPosition:iToastGravityCenter];
        [[NSNotificationCenter defaultCenter] postNotificationName:@"do" object:self userInfo:dictionary];
    }]; 

}
userInfo:dictionary裡面的dictionary就是你要傳遞的字典物件的值
第二步:在firstView裡面的viewWillAppear方法裡面寫入以下程式碼:
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self
           selector:@selector(handleColorChange:)
               name:@"do"
             object:nil];
handleColorChange方法為:
-(void)handleColorChange:(NSNotification*)sender{
NSLog(@"%@",sender);
[self firstView裡面方法]

-(void)handleColorChange:(NSNotification*)sender裡面的sender就是你在secendView裡面所傳遞的字典物件的值,簡單吧?!

相關推薦

使用通知機制dismissViewControllerAnimatedcompletion一個檢視方法

檢視firstView和secendView,點選firstView上面的按鈕presentviewcontroller出secendView;secendView上有個按鈕,點選按鈕dismissViewControllerAnimated,並將某個值傳給firstVi

react navigation一頁面

reac 組件 .get value cto oba info state getpara 使用新的導航組件react navigation,傳值方式略微發生了一些改變 A頁面到B頁面 pushaddremark(){ let _this=this;

vue.js用select實現省提交默認顯示省市信息

scrip item use this res cnblogs alert var option <select v-model="citys" name="cityVal" @change="schoolName(citys)"> <opt

一臺服務器6塊600G的磁盤raid5總大小3T此時無法裝系統?請問為什麽?

raid解決辦法:方法1:做raid5後,不要重啟裝系統,而是再raid界面,繼續分1個小的虛擬磁盤vd 200G,用這個200G的虛擬磁盤裝系統,裝完系統後再把剩余的2.8T分區通過parted)。方法2:先拿1塊盤raid0,剩下5塊在做raid5,在raid0上裝系統。方法3:裝系統時(centos6.

並發實戰:多線程處理任務結束執行後續操作

batch add 批次 for return countdown executors 操作 current 場景: 分批從大列表 blist 讀取數據,執行驗證過濾,符合條件的加入到列表中。然後執行批量入庫操作。 思路: 多任務從 blist 取數據執行,采用Excuet

當保存在Session中的對象取出在外部發生改變時會怎樣

tun nbsp clas tex mod 在外 代碼 tpc spa return_reason_model model = new return_reason_model(); model.F_RetunrnReas

electron-vue應用build開啟exe檔案安裝成功開啟應用報錯

 問題描述:      2.解決方法: import {app, BrowserWindow, Menu, ipcMain, Tray,nativeImage} from 'electron' const path =

關於hibernate查詢的物件set更新資料庫的原因

關於hibernate查詢後的物件,set後,更新資料庫的原因 2018年03月29日 20:18:49 夜影鬼手 閱讀數:370更多 個人分類: hibernate 版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.

c# 子類改變類資訊的問題兩個窗體類的問題

固定一個窗體在另一個窗體中首先需要設定父窗體IsMdiContainer屬性為True,然後在Load事件中加入以下語句: NewContact newConFrm = new NewContact(this); newConFrm.NewGroup = CreateGroup;

回溯法總結+四個小例題(裝載問題01揹包n最大團m著色)

目錄   回溯法的基本策略  回溯法的基本策略 回溯法的解空間 回溯法基本思想 回溯法解題步驟 遞歸回溯和迭代回溯 子集樹和排列樹 裝載問題 01揹包問題回溯法求解 n後問題 圖的最大團問題 圖的m著色

今天在寫測試jdbc程式碼的時候發現數據一直刪不掉資料發現蠢哭自己了

剛剛學習了jdbc,想自己寫一下,鞏固一下知識,插入了一些資料後,想刪除一些資料測試一下,試了很多下都沒刪掉,後來看了一下網上別人寫的程式碼,發現sql語句後面沒有加分號,String sql="delete from tb_student where id=12";簡直了,然後興沖沖的去執行程式碼

通過Appdelegate來進行反向頁面

//先在Appdelegate裡建立一個變數 //例 class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? //建立一個變數 var zuowen:String

被詐騙2.46萬元報警只被告知追回損失的可能性極小

再次把我2018年10月21日沉痛的被詐騙經歷暴露給大家,可能會被大家嘲笑我愚蠢,但是我還是希望我的經歷能幫助更多人能不被騙,也希望能號召所有經歷過類似被詐騙的經歷的大家一起團結起來,協助公安機關破案,打擊罪犯~ 2018年10月21日上午9點半左右,我收到一個“高中同學”(騙子,真實該同學qq號被

求助大家:雙硬碟雙系統開機只能進win10

求助大家:雙硬碟雙系統,開機後,只能進win10 我的需求:雙硬碟安裝雙系統,兩個系統相互獨立,互不影響,通過開機進bios來選擇進入哪個系統。 桌上型電腦配置: 1個256G SSD,已安裝好win10,分割槽表是GPT; 1個1T機械硬碟,原品牌機自帶,分了兩個區,E盤和F盤,原

乖乖比賽忘記了名次?咱們! 演算法伺候!難度指數: **

知之者不如好之者,好之者不如樂之者。 -- 孔子 --      乖乖,比賽後忘記了名次?咱們上! 演算法伺候!    【問題區】   在一次競賽中,A、B、C、D、E等五人經過激烈的角逐,最終取得了各自的名次,他們的一個好朋友很

jsp中servlet轉向web-inf中的jspweb-inf中的jsp轉到servlet類以及servlset!

我們都知道web-inf中的jsp檔案是不能直接訪問的,而且他們之間也是不能相互簡單的訪問,我們常常採用的辦法就是隻有通過servlet中的request.getRequestDispatcher("/WEB-INF/xxx/yyy.jsp").forward(reques

js使用ajax後臺後臺返回字串處理

之前使用js獲取後臺生成的JSON字串,然後給select填充值,這次需要重新獲取一次。 這裡的目標是,在一個input輸入框裡,輸入一個使用者名稱,判斷是否為空,是否不存在,如果存在返回幾個欄位給前臺,前臺再繫結到其他input上 直接壘程式碼 HTML頁面 <in

vue中元件子元件元件改變子元件不能重新渲染

1在子元件中用watch()監聽值的改變,不同的型別的要用不同的監聽方法props: { echartStyle: { type: Object, default() { return {} }}, titleText: {

點選button觸發JS函式通過AJAX後臺查詢將返回處理成table表格新增到模態框裡顯示

//點選觸發onclick事件,攜帶此行的bodycode傳參給JS函式tiaozhuan();(這裡的<a>標籤,可以換成<button>) <td> <a href="javascript:void(0);" oncli

通過串列埠Arduino再通過Arduino控制小車(直流電機)移動與二自由度雲臺轉動角度

## 首先,先附上程式碼 ## #include<Servo.h> Servo up,down; String comdata=""; //用於接收串列埠資料 int numdata[2]={0,0};