Swift - 创建代理协议实现页面间参数传递和方法调用
来源:互联网 发布:全境封锁优化设置 编辑:程序博客网 时间:2024/06/01 19:07
转自:http://www.hangge.com/blog/cache/detail_717.html
在开发中,经常需要用到协议代理模式。比如,进入编辑页面修改数据后,将新数据回传到主界面。
下面通过一个样例来说明协议代理模式,功能如下:
1,主页面有一个标签和一个修改按钮,点击修改按钮会跳转到编辑页面
2,编辑页面中修改输入框的文字后,点击“确定”则返回主页面,同时主页面的标签值会替换成新值
3,如果点击编辑页面的“取消”按钮则直接返回主页面
效果图如下:
实现过程:
1,首先在storyboard中绘制如下两个界面,同时将主界面的“修改”按钮与编辑页做present modally关联
2,设置这个关联Segue的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
)
}
6,在Storyboard中,将编辑页的Class设为EditViewController
原文出自:www.hangge.com 转载请保留原文链接:http://www.hangge.com/blog/cache/detail_717.html
0 0
- Swift - 创建代理协议实现页面间参数传递和方法调用
- 页面间参数传递方法
- Swift - 纯代码实现页面segue跳转,以及参数传递
- Swift - 纯代码实现页面segue跳转,以及参数传递
- 利用js方法实现html静态页面间参数传递
- 利用js方法实现html静态页面间参数传递
- JSP几种页面间传递参数实现的方法
- JSP几种页面间传递参数实现的方法
- JSP页面间传递参数方法介绍
- JSP页面间传递参数方法介绍
- JSP页面间传递参数方法
- JSP 页面间传递参数方法介绍
- JSP页面间传递参数方法介绍
- JSP页面间传递参数方法介绍
- GET方法 页面间参数传递获取
- JSP页面间传递参数方法介绍
- JSP页面间传递参数方法介绍
- JSP页面间传递参数方法介绍
- 分布式系统、集群的时间同步
- 企业支付宝账号开发接口教程--JAVA-UTF-8
- 关于C语言中输出格式
- Hibernate ORM实现原理简述
- python 入门日记
- Swift - 创建代理协议实现页面间参数传递和方法调用
- 代码覆盖率分析
- 深入理解viewport
- 树莓派3 ROS语音包开发之端点检测(短时能量)
- 剑指Offer_38_二叉树的深度
- 熟悉Activity吗
- 拓展欧几里得详解 及其题目 POJ 1061 2115 2142 UVA 10673 10090
- css3动画
- mount