4.IOS(swift)-ViewController·页面传值

方法共有如下几种,例子中会分别用到

一.通过segue进行传值
二.通过delegate进行传值
三.通过Notification进行传值
四.通过回调函数进行传值

需求:

我们经常会使用navigationViewController,使用segue拉拉线,就可以实现页面跳转,使用prepareForSegue方便进行参数的正向传递,但我们也许也有的业务会是反向的传递参数,这个时候需要使用delegate。
假设有两个vc,事先做好了segue拉线,设置了按钮啥的,然后可以直接正向跳转,以及因为在一个navigation里面所以,第二个vc有个默认的back(发送并返回,这里即“发送给A“按钮)按钮可以反向的跳转,第一个是avc,第二个是bvc, 在bvc中我们写一个协议protocol,当然这个协议是写在类外面的,只是和类在同一个swift文件中


4.IOS(swift)-ViewController·页面传值_第1张图片
AViewController.png
4.IOS(swift)-ViewController·页面传值_第2张图片
BViewController.png

通过segue和delegate正反向进行传值

这个例子AViewController 通过 segue 传值 BViewController,BViewController 通过delegate 传值 AViewController

//
//  AViewController.swift
//  SendParams_A2B_B2A
//
//  Created by hongjunyao on 15/4/5.
//  Copyright (c) 2015年 hongjunyao. All rights reserved.
//

import UIKit

class AViewController: UIViewController {

   
    @IBOutlet weak var receiveLabel: UILabel!
    @IBAction func sendBtnAction(sender: AnyObject) {
        
        self.performSegueWithIdentifier("toBviewController", sender: nil)
    
    }
    @IBOutlet weak var textField: UITextField!
    
    
    override func viewDidLoad() {
        super.viewDidLoad()

    }

    // MARK: - Navigation
    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        
        if(segue.identifier == "toBviewController"){
            var bVc:BViewController = segue.destinationViewController as BViewController
            bVc.tempString = textField.text
            bVc.delegate = self
        }
    }
}

extension AViewController:SendMessageDelegate{

    func sendWord(message: String) {
        receiveLabel.text = message
    }
}
//
//  BViewController.swift
//  SendParams_A2B_B2A
//
//  Created by hongjunyao on 15/4/5.
//  Copyright (c) 2015年 hongjunyao. All rights reserved.
//

import UIKit

protocol SendMessageDelegate{
    func sendWord(message : String)
}
class BViewController: UIViewController {

    @IBOutlet weak var receiveLabel: UILabel!
    @IBAction func sendBtnAction(sender: AnyObject) {
        if((delegate) != nil){
 
            self.delegate?.sendWord(textField.text)
            self.navigationController?.popViewControllerAnimated(true)
        }
   
    }
    @IBOutlet weak var textField: UITextField!
    var tempString:String?
    var delegate : SendMessageDelegate?
    override func viewDidLoad() {
        super.viewDidLoad()

        self.receiveLabel.text = tempString

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        
    }
}

通过Notification进行传值

通过回调函数进行传值

你可能感兴趣的:(4.IOS(swift)-ViewController·页面传值)