美文网首页iOS_TipsiOS 开发
使用代理进行页面间传值

使用代理进行页面间传值

作者: 焉知非鱼 | 来源:发表于2016-03-18 01:05 被阅读52次

建立一个空项目, 删除 ViewController.swift, 新建 AViewControllor.swiftBViewController.swift, 并在 AViewController 中嵌入导航控制器。分别在这两个控制器中拖入按钮和 Label, 并进行联线和设置 Outlet。 选中 AViewControllorBViewController 之间的联线, 设置其 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() {
       // 设置控制器为 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 // 设置代理
            
        }
    }
    
    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

// 发送消息的协议
protocol SendMessageDelegate {
    func sendValue(message: String)
}

class BViewController: UIViewController, UITextFieldDelegate {
    // 代理给 A 控制器, 是为了把值传给 A, 这儿用协议来进行控制器之间的通信
    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 实例设置为导航控制器的 topViewController
        let _ = nav.topViewController as! AViewController
        return true
    }
Paste_Image.png s.gif

相关文章

  • 使用代理进行页面间传值

    建立一个空项目, 删除 ViewController.swift, 新建 AViewControllor.swif...

  • iOS 代理的基本使用

    简介 代理在开发过程中比较常见,像 就是系统自带的协议,代理一般用来页面间传值,传递事件,接下来通过页面间传值来简...

  • vue + vuex 全家桶浏览器间数据共享方案

    方案思路: 页面内仍然使用vuex做组件间传值,页面之间使用localstorage传值,并且监听storage事...

  • 代理

    不同页面间传值是必不可少,传值的方式有很多(方法传值,属性传值,代理传值,单例传值) ,这里主要总结下属性传值和代...

  • iOS页面间逆传值

    页面间传值有两种: 正向传值(利用属性传值就可以了,很简单) 逆向传值(有3种常用的方法) 代理传值 block传...

  • ioS 页面(代理、通知、block、单例、属性)传值

    iOS 页面(代理、通知、block、单例、属性)传值 一、传值分类 页面传值基本分为两种:正向传值和反向传值。 ...

  • iOS 页面(代理、通知、block、单例、属性)传值

    iOS 页面(代理、通知、block、单例、属性)传值 一、传值分类 页面传值基本分为两种:正向传值和反向传值。 ...

  • 界面通信

    //控制器1 importUIKit //页面传值1:从前往后传 //页面传值2:(1)闭包传值 //(2)代理传...

  • iOS页面间传值详解(二)

    在iOS页面间传值详解(一)中,介绍了iOS界面间的正向传值以及逆向传值的两种方法,其实逆向传值还可以使用bloc...

  • 小程序navigateTo页面间传值

    页面间传值:打开新页面操作时改变前一个页面的值场景描述:在A页面向B页面传一个num,在B页面对num进行操作后,...

网友评论

    本文标题:使用代理进行页面间传值

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