Swift - 创建代理协议实现页面间参数传递和方法调用

在开发中,经常需要用到协议代理模式。比如,进入编辑页面修改数据后,将新数据回传到主界面。

下面通过一个样例来说明协议代理模式,功能如下:

1,主页面有一个标签和一个修改按钮,点击修改按钮会跳转到编辑页面

2,编辑页面中修改输入框的文字后,点击“确定”则返回主页面,同时主页面的标签值会替换成新值

3,如果点击编辑页面的“取消”按钮则直接返回主页面

效果图如下:

实现过程:

1,首先在storyboard中绘制如下两个界面,同时将主界面的“修改”按钮与编辑页做present modally关联

2,设置编辑页面的Identity为EditView

3,主界面 ViewController.swift


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

import UIKit

class ViewController: UIViewController,EditViewControllerDelegate{

    @IBOutlet weak var label: UILabel!

    

    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

    }

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }

    

    //页面跳转时

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        if segue.identifier == "EditView"{

            //通过seque的标识获得跳转目标

            let controller = segue.destinationViewController as EditViewController

            //设置代理

            controller.delegate = self

            //将值传递给新页面

            controller.oldInfo = label.text

        }

    }

    func editInfo(controller:EditViewController, newInfo:String){

        label.text = newInfo;

        //关闭编辑页面

        controller.presentingViewController!.dismissViewControllerAnimated(true, completion: nil)

    }

    

    func editInfoDidCancer(controller:EditViewController){

        //关闭编辑页面

        controller.presentingViewController!.dismissViewControllerAnimated(true, completion: nil)

    }

}

4,编辑页 EditViewController.swift


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

import UIKit

class EditViewController: UIViewController {

    @IBOutlet weak var textField: UITextField!

    

    var delegate:EditViewControllerDelegate?

    

    var oldInfo:String?

    

    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view.

        if oldInfo  != nil{

            textField.text = oldInfo

        }

    }

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }

    @IBAction func done(sender: AnyObject) {

        delegate?.editInfo(self, newInfo: textField.text)

    }

    @IBAction func cancel(sender: AnyObject) {

        delegate?.editInfoDidCancer(self)

    }

}

5,编辑页代理 EditViewControllerDelegate.swift


1

2

3

4

protocol EditViewControllerDelegate{

    func editInfo(controller:EditViewController, newInfo:String)

    func editInfoDidCancer(controller:EditViewController)

}

时间: 2024-10-06 20:27:25

Swift - 创建代理协议实现页面间参数传递和方法调用的相关文章

小强的HTML5移动开发之路(53)——jQueryMobile页面间参数传递

在单页模版中使用基于HTTP的方式通过POST和GET请求传递参数,而在多页模版中不需要与服务器进行通信,通常在多页模版中有以下三种方法来实现页面间的参数传递. 1.GET方式:在前一个页面生成参数并传入下一个页面,然后在下一个页面中进行GET内容解析. 2.通过HTML5的Web Storage进行参数传递. 3.建立当前页面变量,在前一个页面将所需传递的参数内容赋值到变量中,在后一个页面从变量中将参数取出来.(程序灵活性较弱) 一.以GET方式实现页面间参数传递 <!DOCTYPE html

HTML5移动开发之路(53)——jQueryMobile页面间参数传递

本文为 兄弟连IT教育 机构官方 HTML5培训 教程,主要介绍:HTML5移动开发之路(53)--jQueryMobile页面间参数传递 在单页模版中使用基于HTTP的方式通过POST和GET请求传递参数,而在多页模版中不需要与服务器进行通信,通常在多页模版中有以下三种方法来实现页面间的参数传递. 1.GET方式:在前一个页面生成参数并传入下一个页面,然后在下一个页面中进行GET内容解析. 2.通过HTML5的Web Storage进行参数传递. 3.建立当前页面变量,在前一个页面将所需传递的

jsp页面间的传值方法

JSP页面间传递参数是经常需要使用到的功能,有时还需要多个JSP页面间传递参数.下面介绍一下实现的方法. (1)直接在URL请求后添加 如:< a href="thexuan.jsp?action=transparams&detail=directe">直接传递参数< /a> 特别的在使用response.sendRedirect做页面转向的时候,也可以用如下代码: response.sendRedirect("thexuan.jsp?acti

PHP页面间参数传递的四种方法详解

2016-04-16 定义page01.php和page02.php两个php文件,将page01中的内容想办法传递到page02,然后供我们继续使用.--------------------------------------------------------------------------------第一种:使用客户端浏览器的cookie.cookie很容易理解,就是一个临时文件,可以把它看成一个储藏室,浏览器在浏览的过程中记录一些信息,就暂时存放在这里.在page01中设置一个coo

js中子父页面数据传递与方法调用

A父页面 ,B为子页面 1.父页面调用子页面 A中调用B中方法:self.frames[iframeName].BFunction(); 注:iframeName:为父页面中iframe的name属性值 BFunction()为子页面中方法 2.子页面调用父页面 B中调用A中方法:self.parent.AFunction(); 注:AFunction()为父页面中方法.

合作开发-ASP.Net页面间传值

在合作开发中,在页面串传值的时候,遇到了一些困难,在网上搜罗了一下,发现好多的传值方式,可以简单地分以下三种. 一. URL传值 原页面的值放到目标页面的URL中,然后通过QueryString方法获得该值.然而它的缺点是传递的值是会显示在浏览器的地址栏上的(不安全),同时又不能传递对象,但是在传递的值少而安全性要求不高的情况下,这个方法还是一个不错的方案.下面展示用法: 源页面WebForm1.aspx.cs中的部分代码: private void Button1_Click(object s

JAVASCRIPT实现的WEB页面跳转以及页面间传值方法

在WEB页面中,我们实现页面跳转的方法通常是用LINK,BUTTON LINK ,IMG LINK等等,由用户点击某处,然后直接由浏览器帮我们跳转. 但有时候,需要当某事件触发时,我们先做一些操作,然后再跳转,这时,就要用JAVASCRIPT来实现这一跳转功能. 下面是具体的做法: 一:跳转到新页面,并且是在新窗口中打开时: 复制代码 代码如下: function gogogo() { //do someghing here... window.open("test2.html");

wp8.1 Study1: 页面导航&amp;页面间值传递

摘要:wp8.1与wp8中很多API是不一样了,wp8.1把以前wp7.x时的api去掉了,更多与win8.1的API相似.比如以下的页面导航和页面之间的值传递 1.页面导航 利用Frame.Navigate() 方法,C#语句如下: 1 Frame.Navigate(typeof(Page2));//Page2为一个页面的名称 这里需要注意的是此方法是可以重载的,即后面介绍的页面间值传递方法. 2.页面间值传递 这里利用Frame.Navigate()重载方法,进行单个值传递和多个值传递 1)

【ASP.NET】如何使用类创建公共函数,在不同ASP.NET页面间重复调用

为了减少代码冗余,应将公共函数写在类中,供不同ASP.NET页面调用. 1,先新建一个类,并在类中添加函数逻辑 namespace public_function_demo { public class MyFunction { public static string tbName(string tbNo) { if (tbNo == "510101") { return "3GPP 51.010-1"; } else { return "3GPP 51