反向傳值

反向傳值

反向傳值有三種方式膊畴,分別是閉包、消息中心私蕾、單例
從后一個視圖控制器把值傳給前一個視圖控制器

閉包

//用閉包做反向傳值猎提,就是利用閉包的聲明、實(shí)現(xiàn)和調(diào)用:
//1.在下一個界面中聲明閉包(將要傳的值通過閉包的參數(shù)來傳)
//2.在上一個界面中界面跳轉(zhuǎn)到下一個界面的時候去實(shí)現(xiàn)閉包
//3.在下一個界面消失的時候去調(diào)用閉包

class FirstViewController: YTViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        self.btn.setTitle("界面1", forState: .Normal)
    }

    //實(shí)現(xiàn)父類按鈕點(diǎn)擊的方法
    override func buttonAction(btn: UIButton) {
        
        //跳轉(zhuǎn)到下一個界面
        let second = SecondViewController()
        //2.實(shí)現(xiàn)閉包
        second.sendValue = {(value) in
        
            //使用從上一個界面?zhèn)鬟^來的值
            self.textField.text = value
        }
        
        
        self.presentViewController(second, animated: true, completion: nil)
    }
    

}
=========================第二頁面================
class SecondViewController: YTViewController {
    
    //MARK: - 屬性
    //1.聲明閉包
    var sendValue: ((String)->Void)? = nil
    
    
    //MARK: - 方法
    override func viewDidLoad() {
        super.viewDidLoad()

        self.btn.setTitle("界面2", forState: .Normal)
    }

    //實(shí)現(xiàn)父類的按鈕點(diǎn)擊方法
    override func buttonAction(btn: UIButton) {
        
        //3.調(diào)用閉包
        self.sendValue!(self.textField.text!)
        self.dismissViewControllerAnimated(true, completion: nil)
    }
    

}

消息中心

//消息中心:相當(dāng)于生活中的廣播站寸五。1.用來發(fā)送消息梳凛;2.一個消息中心可以發(fā)送多條消息,每條消息以不同的消息名來區(qū)分
//觀察者:相當(dāng)于收音機(jī)梳杏。1.用來接收消息韧拒;2.能接收到消息的前提:a.消息中心發(fā)送消息,并且是實(shí)時的 b.觀察者觀察的消息名要和消息中心發(fā)送的消息的消息名保持一致 3.同一個觀察者可以接收不同的消息
//消息:消息中心發(fā)出的內(nèi)容/觀察者接收的內(nèi)容

//消息中心做反向傳值:在下一個界面中使用消息中心發(fā)送消息(消息的內(nèi)容就是要傳的值)十性;在上一個界面注冊觀察者來接收消息

class FirstViewController: YTViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        self.btn.setTitle("界面1", forState: .Normal)
        
        //2.注冊成為觀察者
        //參數(shù)1:觀察者對象
        //參數(shù)2:消息中心發(fā)送消息的時候觀察者會自動調(diào)用的方法對應(yīng)的selector(觀察者接收到消息后會調(diào)用的方法)-->必須帶一個參數(shù)叛溢,并且參數(shù)的類型是NSNotification
        //參數(shù)3:觀察者要觀察的消息的名字
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "notificationAction:", name: "nof1", object: nil)
        
    }
    
    func notificationAction(nof:NSNotification) {
        
        //object屬性就是消息的內(nèi)容
        print("接收到消息:\(nof.object)")
        
        self.textField.text = nof.object as? String
        
    }

    //實(shí)現(xiàn)父類按鈕點(diǎn)擊的方法
    override func buttonAction(btn: UIButton) {
        
        //跳轉(zhuǎn)到下一個界面
        let middle = MiddleViewController()
        self.presentViewController(middle, animated: true, completion: nil)
    }
    

}
=====================下一頁面================
class SecondViewController: YTViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        self.btn.setTitle("界面2", forState: .Normal)
    }

    //實(shí)現(xiàn)父類的按鈕點(diǎn)擊方法
    override func buttonAction(btn: UIButton) {
        
        //1.使用消息中心發(fā)送消息(消息的內(nèi)容就是要傳的值)
        //a.拿到消息中心(單例對象)NSNotificationCenter.defaultCenter()
        //b.發(fā)送消息
        //參數(shù)1:消息名(相當(dāng)于頻段)
        //參數(shù)2:要發(fā)送的消息的內(nèi)容
        NSNotificationCenter.defaultCenter().postNotificationName("nof1", object: self.textField.text)
        
        //返回上一個界面
       self.dismissViewControllerAnimated(true, completion: nil)
    }
    

}

單列

創(chuàng)建一個單列的類保證值得唯一性
class ValueManager: NSObject {
    
    //1.保證當(dāng)前這個類只能創(chuàng)建出一個對象,而且這個對象必須defalutManager去拿到
    //拿到當(dāng)前這個類唯一的對象
    static let defalutManager = ValueManager()
    
    //構(gòu)造方法私有化
    private override init() {
    }
    
    //2.聲明一個屬性的類型是需要傳的值的類型
    var sendValue = ""
    

}
==========第二個頁面========
class SecondViewController: YTViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    //實(shí)現(xiàn)父類的按鈕點(diǎn)擊方法
    override func buttonAction(btn: UIButton) {
        
        //3.拿到單例對象劲适,并且給屬性賦值
        ValueManager.defalutManager.sendValue = self.textField.text!
        
        //返回上一頁
       self.dismissViewControllerAnimated(true, completion: nil)
    }
    

}
==================第一頁面=========
override func viewDidLoad() {
        super.viewDidLoad()

        
    }
    
    override func viewWillAppear(animated: Bool) {
        
        super.viewWillAppear(animated)
        //通過單例對象拿到值
        self.textField.text = ValueManager.defalutManager.sendValue
    }

    //實(shí)現(xiàn)父類按鈕點(diǎn)擊的方法
    override func buttonAction(btn: UIButton) {
        
        //跳轉(zhuǎn)到下一個界面
        let second = MiddleViewController()
        self.presentViewController(second, animated: true, completion: nil)
    }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末楷掉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子霞势,更是在濱河造成了極大的恐慌烹植,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愕贡,死亡現(xiàn)場離奇詭異草雕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)固以,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門促绵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嘴纺,你說我怎么就攤上這事败晴。” “怎么了栽渴?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵尖坤,是天一觀的道長。 經(jīng)常有香客問我闲擦,道長慢味,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任墅冷,我火速辦了婚禮纯路,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寞忿。我一直安慰自己驰唬,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叫编,像睡著了一般辖佣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上搓逾,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天卷谈,我揣著相機(jī)與錄音,去河邊找鬼霞篡。 笑死世蔗,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的朗兵。 我是一名探鬼主播凸郑,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼矛市!你這毒婦竟也來了芙沥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤浊吏,失蹤者是張志新(化名)和其女友劉穎而昨,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體找田,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡歌憨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了墩衙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片务嫡。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖漆改,靈堂內(nèi)的尸體忽然破棺而出心铃,到底是詐尸還是另有隱情,我是刑警寧澤挫剑,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布去扣,位于F島的核電站,受9級特大地震影響樊破,放射性物質(zhì)發(fā)生泄漏愉棱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一哲戚、第九天 我趴在偏房一處隱蔽的房頂上張望奔滑。 院中可真熱鬧,春花似錦顺少、人聲如沸朋其。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽令宿。三九已至,卻和暖如春腕窥,著一層夾襖步出監(jiān)牢的瞬間粒没,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工簇爆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留癞松,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓入蛆,卻偏偏與公主長得像响蓉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子哨毁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

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

  • 代理枫甲、block、消息中心扼褪、單例想幻。 正向傳值 通過屬性(特性)的值,在上個使用本類(所在類)對象的類中话浇,直接傳遞其...
    goyohol閱讀 833評論 1 6
  • 閉包反向傳值 反向傳值 // 消息中心:相當(dāng)于生活中的廣播站。1.用來發(fā)送消息赏寇;1.一個消息中心可以發(fā)送多條消息吉嫩,...
    寫啥呢閱讀 280評論 0 2
  • 反向傳值 ??在開發(fā)中我們經(jīng)常會遇到將當(dāng)前視圖控制中的某些值傳到另一個視圖控制器,下面將介紹常用的幾種反向傳值的方...
    pingui閱讀 886評論 0 1
  • asf
    asdfklasjdfkjg閱讀 116評論 0 0