第一个视图控制器:

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代理和传值的更多相关文章

  1. swift中的传值

    光阴似箭,日月如梭,转眼间学习的旅途已经过了一大半了,忘着自己所敲过的成批的代码,看着自己付出和努力,默默地为自己这几个月的奋斗感到欣慰,不论学习的路途再怎么的艰辛,但是自己还是坚持过来了,回想着以往 ...

  2. OC10_代理反向传值

    // // ProtectedDelegate.h // OC10_代理反向传值 // // Created by zhangxueming on 15/6/24. // Copyright (c) ...

  3. OC9_代理正向传值

    // // ProtectedDeleagate.h // OC9_代理正向传值 // // Created by zhangxueming on 15/6/24. // Copyright (c) ...

  4. Swift代理的使用

    Swift代理的使用 协议规定了用来实现某一特定功能所必需的方法和属性. 任意能够满足协议要求的类型被称为遵循(conform)这个协议. 类,结构体或枚举类型都可以遵循协议,并提供具体实现来完成协议 ...

  5. Swift: 比较Swift中闭包传值、OC中的Block传值

    一.介绍 开发者对匿名函数应该很清楚,其实它就是一个没有名字的函数或者方法,给人直观的感觉就是只能看到参数和返回值.在iOS开发中中,它又有自己的称呼,在OC中叫Block代码块,在Swift中叫闭包 ...

  6. Swift 08.页面传值

    OC中经常用到的一种初始化控制器的方法.比如A push B.并且将A的一个值:value 传递给B 使用.简单的办法就是 在B重构init方法.比如在.h 中定义: - ()initValue:(N ...

  7. iOS 代理反向传值

    在上篇博客 iOS代理协议 中,侧重解析了委托代理协议的概念等,本文将侧重于它们在开发中的应用. 假如我们有一个需求如下:界面A上面有一个button.一个label.从界面A跳转到界面B,在界面B的 ...

  8. iOS-设计模式之代理反向传值

    代理设计模式就是自己的方法自己不实现,让代理对象去实现. 可以让多个类实现一组方法. 委托模式的好处在于: 1.避免子类化带来的过多的子类以及子类与父类的耦合 2.通过委托传递消息机制实现分层解耦 代 ...

  9. Swift代理造成内存泄漏的解决办法

    在swift中,使用代理 ,可能很多人会这样实现: .首先定义一份协议. protocol ToolProrocol{ //代理方法 func didRecieveResults(result:Int ...

随机推荐

  1. 4CSS颜色和背景

    ---------------------------------------------------------------------------------------------------- ...

  2. PHP流程控制语句(if,foreach,break......)

    背景:PHP程序中,必不可少的要用到流程控制语句.这次对于流程控制语句进行一些总结. 条件控制语句和循环控制语句是两种基本的语法结构,它们都是用来控制程序执行流程.也是构成程序的主要语法基础. 一.程 ...

  3. Android项目实战_手机安全卫士系统加速

    ## 1.本地数据库自动更新的工作机制1. 开启一个服务,定时访问服务器2. 进行版本对比,如果最新版本比较高,获取需要更新的内容3. 将新内容插入到本地数据库中 ## 2.如何处理横竖屏切换1. 指 ...

  4. 移动web——touch事件应用

    基本概况 1.touch事件在移动端被用来代替click事件,因为click事件的触发会延迟影响了用户体验 2.touch事件还可以与translate构成吸附效果 3.现行有一种排版方式是左边宽度是 ...

  5. C# 执行sql语句批量更新

    int x = db.Database.ExecuteSqlCommand(string.Format("update T_Pension SET UnitType = '{0}' WHER ...

  6. mvc 类中对应数据库属性

    [StringLength()] //可空 对应数据库可空 [DefaultValue("")] [DisplayName("添加人用户名")] public ...

  7. 微信小程序获取二维码并把logo替换为自己的头像

    $avatarUrl = 'http://cms-bucket.nosdn.127.net/2018/05/28/a1a44ffdc2d24f928c1860d4fbf54703.jpeg?image ...

  8. Robberies (01背包dp变形)

    题意:一个强盗要抢劫银行又不想被抓到,所以要进行概率分析求他在不被抓的情况下能抢最多的钱.他给定T(样例个数),N(要抢的银行的个数),P(被抓的概率要小于P)Mj(强盗能抢第j个银行Mj元钱),Pj ...

  9. Tomcat启动失败--Several ports (8005, 8080, 8009)

    启动Tomcat服务器报错: Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are alre ...

  10. Map的两种遍历方式

    ********************************************************************************* ****************** ...