0122iosapp_两个界面实现返回效果,并且使用协议方法传递界面数据

项目:teowlewBACK0121

viewcontroller 一界面

//
//  ViewController.swift
//  teowiewBACK0121
//
//  Created by Mac on 1/21/19.
//
//第一界面
import UIKit

//继承协议
class ViewController: UIViewController,SecondDateProtocol{
    //完整协议方法
    func label_text_date_send(date: String) {
        
        recive_msg.text = date
    }
    
    
    var recive_msg_s : String?

    @IBOutlet weak var first_texl_field: UITextField!
    @IBAction func send_to_second_button(_ sender: UIButton) {
        //发送数据
        if first_texl_field.text != "" {
            //绑定链接
            performSegue(withIdentifier: "main_to_second", sender: self)
            
        }else{
            recive_msg.text = "请输入数据"
        }
    }
    
    @IBOutlet weak var recive_msg: UILabel!
    
    @IBAction func change_background_button(_ sender: UIButton) {
        //更换背景颜色
        view.backgroundColor = #colorLiteral(red: 1, green: 0.7808927183, blue: 0.6309794435, alpha: 1)
        
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        recive_msg.text = recive_msg_s
    }
    //扩展链接
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        
        if segue.identifier == "main_to_second"{
            //建立第二界面在本界面的代理,或者是将第二界面在本界面实例化
             let second_view_controller = segue.destination as! SecondViewController
            //操作第二界面的属性
            second_view_controller.recive_msg = first_texl_field.text
            
            //将而界面的协议变量,定义为自身
            second_view_controller.second_date_protocol = self
            
        
        }
    }


}

/*
 
 1,不要在按钮上加页面segue ,要两个视图之间加segue
 
 */

secondviewcontroller 二界面

//
//  SecondViewController.swift
//  teowiewBACK0121
//
//  Created by Mac on 1/21/19.
//

import UIKit
//创建协议
protocol SecondDateProtocol {
    //协议方法,注意是不完整方法
    func label_text_date_send(date:String)
}

class SecondViewController: UIViewController {
    
    //
    var recive_msg : String?
    //创建协议变量
    var second_date_protocol : SecondDateProtocol?
    
    @IBOutlet weak var second_text_field: UITextField!
    
    @IBAction func send_to_main_button(_ sender: UIButton) {
        
        if second_text_field.text != "" {
            
            performSegue(withIdentifier: "second_to_main", sender: self)
        }else{
            recive_msg_lable.text = "请输入数据"
    
        }
        
    }
    
    @IBOutlet weak var recive_msg_lable: UILabel!
    
    //返回按钮
    @IBAction func back_to_main_button(_ sender: UIButton) {
        
        if second_text_field.text != "" {
            //使用协议变量的方法,实现数据传递
            second_date_protocol?.label_text_date_send(date: second_text_field.text!)
            //自身消失
            self.dismiss(animated: true, completion: nil)
        }else{
            recive_msg_lable.text = "请输入数据"
        }
        
        
    }
    
    
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        recive_msg_lable.text = recive_msg
    }
    //扩展链接
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        
        if segue.identifier == "second_to_main" {
            
            let main_view_controller = segue.destination as! ViewController
            //
            main_view_controller.recive_msg_s = second_text_field.text
        }
        
    }

    

}


/*
 视图执行消失的方法,实现返回上个界面的效果,上个界面的内容不会改变。
 self.dismiss(animated: true, completion: nil)
 
 采用返回效果传递数据:
 二界面向一界面返回,并且发送二界面的数据。
 
 
 1.二界面在类外创建协议,协议内声明方法,一界面继承协议,将方法完整。
 protocol SecondDateProtocol {
 //二界面:协议方法,注意是不完整方法
 func label_text_date_send(date:String)
 }
 //一界面:继承协议
 class ViewController: UIViewController,SecondDateProtocol{
 //完整协议方法
 func label_text_date_send(date: String) {
 
 recive_msg.text = date
 }
 
 
 
 2.二界面在类内初始化协议,就是声明变量为协议,然后可以执行协议内分方法
 //创建协议变量
 var second_date_protocol : SecondDateProtocol?
 3,一界面在segue的扩展perpare中,将二界面的协议属性定义为自身
 
 //一界面:扩展链接
 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
 
 if segue.identifier == "main_to_second"{
 //建立第二界面在本界面的代理,或者是将第二界面在本界面实例化
 let second_view_controller = segue.destination as! SecondViewController
 //将二界面的协议变量,定义为自身
 second_view_controller.second_date_protocol = self
 }
 }
 
 4,二界面在触动按钮中执行 协议变量的方法,实现数据传递
 
 //二界面:返回按钮
 @IBAction func back_to_main_button(_ sender: UIButton) {
 
 if second_text_field.text != "" {
 //使用协议变量的方法,实现数据传递
 second_date_protocol?.label_text_date_send(date: second_text_field.text!)
 //自身消失
 self.dismiss(animated: true, completion: nil)
 }else{
 recive_msg_lable.text = "请输入数据"
 }
 
 }
 
 
 */

猜你喜欢

转载自blog.csdn.net/whqwjb/article/details/86589686
今日推荐