Swift代理和传值
第一个视图控制器:
import UIKit
// 遵循协议
class ViewController: UIViewController,SecondVCDelegate
{
override func viewDidLoad() {
super.viewDidLoad()
// 创建一个button
let button1 = UIButton(frame: CGRectMake(120, 120, 50, 50))
// 修改背景颜色
button1.backgroundColor = UIColor.redColor()
self.view.addSubview(button1)
// 点击方法
button1.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside)
}
// button点击方法
func buttonAction(sender:UIButton){
// 跳转下一个界面
let secondVC = SecondViewController()
// 属性传值
secondVC.passValue = "咻"
// 指定代理
// secondVC.delegate = self
// 定义block
secondVC.block = { (tempColor:UIColor)->Void in
self.view.backgroundColor = tempColor
}
self.navigationController?.pushViewController(secondVC, animated: true)
}
// 实现代理方法
func changeColor(tempColor: UIColor) {
self.view.backgroundColor = tempColor
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
/*************************************************************/
代理的六大步骤
1.后页面制定协议
2.前页面代理遵循协议
3.后页面设置代理属性
4.前页面指定代理self
5.后页面发送代理方法命令
6.前页面代理实现代理方法
第二个视图控制器:
import UIKit
protocol SecondVCDelegate {
// 协议中的方法
func changeColor(tempColor:UIColor)
}
class SecondViewController: UIViewController {
// 属性
var passValue:String?
// 代理属性
var delegate:SecondVCDelegate?
// block属性
var block:((UIColor)->Void)?
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.cyanColor()
print(self.passValue!)
self.title = self.passValue
// 返回button
let button2 = UIButton(frame: CGRectMake(120, 120, 50, 50))
button2.backgroundColor = UIColor.blackColor()
button2.addTarget(self, action: "button2Action:", forControlEvents: UIControlEvents.TouchUpInside)
self.view.addSubview(button2)
}
// button2点击方法
func button2Action(sender:UIButton) {
// 发送代理方法命令
// self.delegate?.changeColor(UIColor.redColor())
// 调用block
self.block!(UIColor.redColor())
// 返回
self.navigationController?.popViewControllerAnimated(true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Swift代理和传值的更多相关文章
- swift中的传值
光阴似箭,日月如梭,转眼间学习的旅途已经过了一大半了,忘着自己所敲过的成批的代码,看着自己付出和努力,默默地为自己这几个月的奋斗感到欣慰,不论学习的路途再怎么的艰辛,但是自己还是坚持过来了,回想着以往 ...
- OC10_代理反向传值
// // ProtectedDelegate.h // OC10_代理反向传值 // // Created by zhangxueming on 15/6/24. // Copyright (c) ...
- OC9_代理正向传值
// // ProtectedDeleagate.h // OC9_代理正向传值 // // Created by zhangxueming on 15/6/24. // Copyright (c) ...
- Swift代理的使用
Swift代理的使用 协议规定了用来实现某一特定功能所必需的方法和属性. 任意能够满足协议要求的类型被称为遵循(conform)这个协议. 类,结构体或枚举类型都可以遵循协议,并提供具体实现来完成协议 ...
- Swift: 比较Swift中闭包传值、OC中的Block传值
一.介绍 开发者对匿名函数应该很清楚,其实它就是一个没有名字的函数或者方法,给人直观的感觉就是只能看到参数和返回值.在iOS开发中中,它又有自己的称呼,在OC中叫Block代码块,在Swift中叫闭包 ...
- Swift 08.页面传值
OC中经常用到的一种初始化控制器的方法.比如A push B.并且将A的一个值:value 传递给B 使用.简单的办法就是 在B重构init方法.比如在.h 中定义: - ()initValue:(N ...
- iOS 代理反向传值
在上篇博客 iOS代理协议 中,侧重解析了委托代理协议的概念等,本文将侧重于它们在开发中的应用. 假如我们有一个需求如下:界面A上面有一个button.一个label.从界面A跳转到界面B,在界面B的 ...
- iOS-设计模式之代理反向传值
代理设计模式就是自己的方法自己不实现,让代理对象去实现. 可以让多个类实现一组方法. 委托模式的好处在于: 1.避免子类化带来的过多的子类以及子类与父类的耦合 2.通过委托传递消息机制实现分层解耦 代 ...
- Swift代理造成内存泄漏的解决办法
在swift中,使用代理 ,可能很多人会这样实现: .首先定义一份协议. protocol ToolProrocol{ //代理方法 func didRecieveResults(result:Int ...
随机推荐
- Java系列学习(十三)-字符串
1.字符串基础 概念:字符串本质是打包字符数组的对象,是java.lang.String类的实例 2.字符串的构造方法 public String() public String(byte[] byt ...
- Unity3d dotween
位置 1. 移动到指定位置 obj.transform.DOMove(, , ), 2f); a. 单方向可以用DOMoveX.DOMoveY.DOMoveZ b. 本地坐标系版本:DOLocalMo ...
- checkbox与文字混排无法对齐到一行的解决办法
直接上代码: <span><input style="vertical-align:middle" type="checkbox" name= ...
- JS高级——原型链
构造函数 构造函数是特殊的函数,里面没有returen返回值 new的过程中,会自动将对象返回,不需要return new的过程中,会执行函数中的代码,会将创建的对象赋值给构造函数中的this 基本概 ...
- atom 插件安装【转载】
http://www.cnblogs.com/20145221GQ/p/5334762.html 问题: 输入apm install后,可能一直没有响应,要强行退. 不知道安装的时候可不可以打开ato ...
- haproxy故障处理
1. haproxy 在配置健康检查的时候,默认没有配置页面检查 ,通过端口状态来检测.后端IIS web服务开始可能 是一个站点,或者采用了基于域名的配置方式,导致目前站点停了,后端主机不能被hap ...
- Python 之多线程应用
import socket from threading import Thread def recv_data(): while True: recv_info = udp_socket.recvf ...
- 【Centos7】Tomcat安装及一个服务器配置多个Tomcat
完成解压 参考 http://www.cnblogs.com/h--d/p/5074800.html https://www.cnblogs.com/tudou-22/p/9330875.html 步 ...
- 00 python基础知识
''' ''' print('hello world!') ''' 变量 ''' # 变量的:‘tank’,会在内存中产生一份内存地址 #变量名:相当于一个门牌号,用于与变量进行绑定 # = :用来把 ...
- modelsim 仿真软件 百度云分享 modelsim se 10.7 10.6d 10.6c 10.5 10.4
modelsim se 10.7 链接:https://pan.baidu.com/s/1NDC2yMCZmA4bIRSk2dUiTg 提取码:4l1d 复制这段内容后打开百度网盘手机App,操作更方 ...