《Swift 的界面之间的传值,详细介绍3种传值方式》 正向传值、协议传值、闭包

《Swift 的界面之间的传值,详细介绍3种传值方式》 正向传值、协议传值、闭包,第1张

概述《Swift 的界面之间的传值,详细介绍3种传值方式》正向传值、协议传值、闭包    1、 控制器界面间的正向传值    /*    《Swift 的界面之间的传值,详细介绍3种传值方式》     正向传值、协议传值、闭包 */ /*     随着移动的开发,界面之间的传值,也频繁出现,更关键的是在面试的时候也时常被提起。提起最多的是 Block 同时还有协议 (在Swift中是叫 闭包)。我们要

Swift 的界面之间的传值,详细介绍3种传值方式》正向传值、协议传值、闭包

1、 控制器界面间的正向传值

/*

Swift 的界面之间的传值,详细介绍3种传值方式》

正向传值、协议传值、闭包

*/

随着移动的开发,界面之间的传值,也频繁出现,更关键的是在面试的时候也时常被提起。提起最多的是 Block 同时还有协议 (在Swift中是叫 闭包)。我们要详细介绍它。

// Created by 周双建 on 15/12/7.

// copyright © 2015 周双建. All rights reserved.

//


import UIKit


class VIEwController: UIVIEwController {

let Screen = CGSizeMake(

200,40)

overrIDe func vIEwDIDLoad() {

super.vIEwDIDLoad()

// 我们首先,进行正面解说

//我们先给我们的本控制器设置一个标题 (必须实现导航控制器否者不显示)

self.Title = "第一个控制器"

self.vIEw.backgroundcolor = UIcolor.whitecolor()

// 设置一个点击按钮,驱动事件跳转到下一个控制器

let Btn = UIbutton(type: UIbuttonType.Custom) as UIbutton

Btn.frame = CGRectMake(20, 100,Screen.wIDth,Screen.height)

Btn.setTitle("跳转到第二个控制器",forState: UIControlState.normal)

Btn.setTitlecolor(UIcolor.magentacolor(),forState: UIControlState.normal)

Btn.addTarget(self,action: "BtnClick",forControlEvents: UIControlEvents.touchUpInsIDe)

self.vIEw.addSubvIEw(Btn)

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

}

/*****************************************************************/

// 按钮点击后,事件的触发

func BtnClick(){

//现获取,跳转的控制器对象

let TVC = TwoVIEwController()

//传入一个字符串,给第二个控制器

TVC.TSTR = "第二个控制器"

//在传入一个颜色对象

TVC.TColoer = UIcolor.bluecolor()

//实现界面的跳转

self.navigationController?.pushVIEwController(TVC,animated: true)

}

overrIDe func dIDReceiveMemoryWarning() {

super.dIDReceiveMemoryWarning()

// dispose of any resources that can be recreated.

}

}


第二个控制器的内容是:

//

// TwoVIEwController.swift

// Swift_009

//


import UIKit


class TwoVIEwController: UIVIEwController {

//首先,我们要创建两个对象,来接受上一个界面传来的值

var TSTR :String? // 创建一个字符串对象

var TColoer :UIcolor? //创建一个UIColoer 的颜色对象

overrIDe func vIEwDIDLoad() {

super.vIEwDIDLoad()

//设置控制器的标题

self.Title = self.TSTR

// 设置背景颜色

self.vIEw.backgroundcolor = self.TColoer

// Do any additional setup after loading the vIEw.

}


overrIDe func dIDReceiveMemoryWarning() {

// dispose of any resources that can be recreated.

}

}


2、 协议的反向传值

// FVIEwController.swift

//


import UIKit

/*

注意了:如果不实现,你的定义的协议方法,会一直报错 。如下:Type 'FVIEwController' does not conform to protocol 'FTvCdelegte'

解决方法就是:实现你定义的协议方法

*/

class FVIEwController: UIVIEwController,FTVCdelegte{


overrIDe func vIEwDIDLoad() {

super.vIEwDIDLoad()

//我们要创建一个返回按钮

let Fbtn = UIbutton(type: UIbuttonType.Custom) as UIbutton

Fbtn.frame = CGRectMake(30,self.vIEw.frame.size.wIDth-60,40)

Fbtn.setTitle("跳转到第二个界面",forState: UIControlState.normal)

Fbtn.addTarget(self,action: "Click",forControlEvents: UIControlEvents.touchUpInsIDe)

Fbtn.setTitlecolor(UIcolor.redcolor(),forState: UIControlState.normal)

self.vIEw.addSubvIEw(Fbtn)


// Do any additional setup after loading the vIEw.

}

/****************************************************************/

//跳转触发事件

func Click(){

let Tvc = FtwoVIEwController()

Tvc.delegate_zsj = self

self.navigationController?.pushVIEwController(Tvc,animated: true)

}

overrIDe func dIDReceiveMemoryWarning() {

// dispose of any resources that can be recreated.

}

//实现协议的方法

//更改主题名字

func change(Title: String) {

self.Title = Title

}

//更改背景色

func ChangeColoer(Coloer: UIcolor) {

self.vIEw.backgroundcolor = Coloer

}

//是否成功

func ChangSucces(YON: Bool) {

print(YON)

}

/*

// MARK: - Navigation


// In a storyboard-based application,you will often want to do a little preparation before navigation

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

// Get the new vIEw controller using segue.destinationVIEwController.

// Pass the selected object to the new vIEw controller.

}

*/


}


第二个控制器的内容是:

// FtwoVIEwController.swift

//


import UIKit

//要创建一个协议

protocol FTVCdelegte : NSObjectProtocol{

//在协议里面,声明许多方法

// 第一个,改变标题

func change(Title:String)

//第二个,改变背景色

func ChangeColoer (Coloer:UIcolor)

//是否成功的标志

func ChangSucces(YON:Bool)

}

class FtwoVIEwController: UIVIEwController {

// 创建一个准守协议的对象

var delegate_zsj :FTVCdelegte?

overrIDe func vIEwDIDLoad() {

super.vIEwDIDLoad()

返回上一个界面",forState: UIControlState.normal)

self.vIEw.addSubvIEw(Fbtn)

/************************************************************/

//返回,事件的触发

func Click(){

delegate_zsj?.change("首页")

delegate_zsj?.ChangeColoer(UIcolor.redcolor())

delegate_zsj?.ChangSucces(true)

self.navigationController?.popToRootVIEwControllerAnimated(true)

}

overrIDe func dIDReceiveMemoryWarning() {

// dispose of any resources that can be recreated.

}


/*

*/


}


3、闭包(Block)反向传值

// BBVIEwController.swift

//


import UIKit


class BBVIEwController: UIVIEwController {


overrIDe func vIEwDIDLoad() {

super.vIEwDIDLoad()

//创建一个按钮

let btn = UIbutton(type: UIbuttonType.Custom) as UIbutton

btn.frame = CGRectMake(30,40)

btn.setTitle("UIControlState.normal)

btn.setTitlecolor(UIcolor.magentacolor(),forState: UIControlState.normal)

btn.addTarget(self,forControlEvents: UIControlEvents.touchUpInsIDe)

self.vIEw.addSubvIEw(btn)

// Do any additional setup after loading the vIEw.

}

func Click(){

let BBTC = BBTVIEwController()

BBTC.bbchange = { (Title:String,coloer:UIcolor) in

self.Title = Title

self.vIEw.backgroundcolor = coloer

}

self.navigationController?.pushVIEwController(BBTC,0)"> */


}


第二个控制器是:

// BBTVIEwController.swift

//


import UIKit


class BBTVIEwController: UIVIEwController {

//定义一个闭包,带有两个参数

var bbchange :((Title:String,coloer:UIcolor)->VoID)?

overrIDe func vIEwDIDLoad() {

super.vIEwDIDLoad()

self.vIEw.backgroundcolor = UIcolor.greencolor()

//创建一个按钮

返回到第1个控制器",action: "bClick",forControlEvents: UIControlEvents.touchUpInsIDe)

self.vIEw.addSubvIEw(btn)


// Do any additional setup after loading the vIEw.

}

func bClick(){

bbchange?(Title:"成龙",coloer:UIcolor.redcolor())

self.navigationController?.popToRootVIEwControllerAnimated(true)

}

overrIDe func dIDReceiveMemoryWarning() {

*/


}

总结

以上是内存溢出为你收集整理的《Swift 的界面之间的传值,详细介绍3种传值方式》 正向传值、协议传值、闭包全部内容,希望文章能够帮你解决《Swift 的界面之间的传值,详细介绍3种传值方式》 正向传值、协议传值、闭包所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1081890.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存