使用代理進(jìn)行頁面間傳值

建立一個(gè)空項(xiàng)目, 刪除 ViewController.swift, 新建 AViewControllor.swiftBViewController.swift, 并在 AViewController 中嵌入導(dǎo)航控制器。分別在這兩個(gè)控制器中拖入按鈕和 Label, 并進(jìn)行聯(lián)線和設(shè)置 Outlet。 選中 AViewControllorBViewController 之間的聯(lián)線, 設(shè)置其 identifier 為 "AtoB"。

//
//  AViewController.swift
//  控制器間反向傳值
//
//  Created by chenyf on 16/3/17.
//  Copyright ? 2016年 chenyf. All rights reserved.
//

import UIKit

class AViewController: UIViewController, UITextFieldDelegate, SendMessageDelegate {
    
    @IBOutlet var aTextField: UITextField!
    @IBOutlet var aTextLabel: UILabel!
    @IBAction func passValueToB(sender: UIButton) {
        
    }
    
    
    override func viewDidLoad() {
       // 設(shè)置控制器為 UITextField 的代理
       aTextField.delegate = self
    }
    
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "AtoB" {
            // 取得 B 視圖控制器
            let bController:BViewController = segue.destinationViewController as! BViewController
            // A 給 B 傳值
            bController.tempString = aTextField.text
            bController.delegate   = self // 設(shè)置代理
            
        }
    }
    
    func textFieldShouldReturn(textField: UITextField) -> Bool {
        textField.endEditing(true)
        return true
    }
    
    func sendValue(message: String) {
        self.aTextLabel.text = message
    }
}
//
//  BViewController.swift
//  控制器間反向傳值
//
//  Created by chenyf on 16/3/17.
//  Copyright ? 2016年 chenyf. All rights reserved.
//

import UIKit

// 發(fā)送消息的協(xié)議
protocol SendMessageDelegate {
    func sendValue(message: String)
}

class BViewController: UIViewController, UITextFieldDelegate {
    // 代理給 A 控制器, 是為了把值傳給 A, 這兒用協(xié)議來進(jìn)行控制器之間的通信
    var delegate: SendMessageDelegate?
    var tempString:String?
    
    @IBOutlet var bTextField: UITextField!
    @IBOutlet var bTextLabel: UILabel!
    @IBAction func passValueToA(sender: UIButton) {
        if(self.delegate != nil) {
            self.delegate!.sendValue(bTextField.text!)
            self.navigationController?.popViewControllerAnimated(true)
        }
    }
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        bTextField.delegate = self
        self.bTextLabel.text = tempString
    }
    
    func textFieldShouldReturn(textField: UITextField) -> Bool {
        textField.endEditing(true)
        return true
    }
}

AppDelegate.swift 中:

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        
        // 獲取根視圖控制器
        let nav =  self.window!.rootViewController as! UINavigationController
        // 將 AViewController 實(shí)例設(shè)置為導(dǎo)航控制器的 topViewController
        let _ = nav.topViewController as! AViewController
        return true
    }
Paste_Image.png
s.gif
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • iOS 實(shí)戰(zhàn)開發(fā)課程筆記 本貼旨在作為對極客班 《iOS 開發(fā)實(shí)戰(zhàn)》第五期期課程視頻重新學(xué)習(xí)的筆記。目標(biāo)是建立一個(gè)...
    黃穆斌閱讀 3,238評論 12 57
  • Storyboard是最先在iOS 5引入的一項(xiàng)振奮人心的特性,大幅縮減構(gòu)建App用戶界面所需的時(shí)間。 要介紹St...
    余一波_Bobby閱讀 62,386評論 11 76
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,041評論 4 61
  • 數(shù)學(xué)的“美麗” 不在于簡單的幾個(gè)公式,就把世界囊括其中 而在于公式的由來 是如此的緊湊與嚴(yán)密,合情又合理 把數(shù)學(xué)公...
    怡馨宅閱讀 571評論 5 5

友情鏈接更多精彩內(nèi)容