Swift 视图控制器间传值(正向和反向)
2018-01-06 10:40
232 查看
一、视图控制器间正向传值
1、正向传值有两种方式:第一种是通过属性传值,第二种是通过构造方法传值
2、通过属性传值:
let vc = ViewController()
vc.data = "通过dada属性传值"
self.present(vc, animated:true, completion:nil)
3、通过构造方法传值
// 在ViewController控制器中实现构造方法如下
init(data:String) {
self.data = data
super.init(nibName:nil, bundle:nil)
}
// 在要调用的地方调用ViewController控制器的构造方法实现数据传递
let vc = ViewController(data: "通过构造方法传值")
self.present(vc, animated: true,
completion: nil)
二、视图控制器间反向传值 (VC_1 向 VC_2传值为正向,VC_2 向 VC_1传值为反向)
1、控制器间反向传值要复杂一些,通常使用协议或者闭包完成
2、通过协议实现反向传值
// 在控制器VC_2中声明协议以及协议方法
protocol ViewControllerProtocol {
func sentData(data:
String)
}
// 控制器VC_2
class ViewController:
UIViewController {
// 声明一个Optional类型的代理属性
var delegate :ViewControllerProtocol?
}
// 在控制器VC_2需要反向传值的地方调用该方法进行协议传值,会在VC_1中的sentData方法中接受到此值
delegate?.sentData(data:"反向传值")
// 在控制器VC_1中遵守协议
class HomeVC:
UIViewController, ViewControllerProtocol
// 在控制器VC_1中需要跳转到VC_2的地方指定代理
let vc =ViewController()
vc.delegate =self
self.present(vc, animated:true, completion:nil)
// 在VC_1中实现协议方法
func sentData(data:
String) {
// data 即为VC_1反向传递过来的值
}
3、通过闭包实现反向传值
// 在控制器VC_2中声明一个Optional值类型的闭包
var closure : ((String) ->Void)?
// 在控制器VC_2需要反向传值的地方调用此方法
self.closure!("反向传值")
// 在控制器VC_1中实现跳转到VC_2的方法,并实现反向传值的闭包,当VC_2需要跳转到VC_1并传值时,只需调用控制器VC_2中反向传值的方法即可
let vc = ViewController()
vc.closure = { (data:
String) in
// data即为反向传过来的值
}
self.present(vc, animated: true,
completion: nil)
1、正向传值有两种方式:第一种是通过属性传值,第二种是通过构造方法传值
2、通过属性传值:
let vc = ViewController()
vc.data = "通过dada属性传值"
self.present(vc, animated:true, completion:nil)
3、通过构造方法传值
// 在ViewController控制器中实现构造方法如下
init(data:String) {
self.data = data
super.init(nibName:nil, bundle:nil)
}
// 在要调用的地方调用ViewController控制器的构造方法实现数据传递
let vc = ViewController(data: "通过构造方法传值")
self.present(vc, animated: true,
completion: nil)
二、视图控制器间反向传值 (VC_1 向 VC_2传值为正向,VC_2 向 VC_1传值为反向)
1、控制器间反向传值要复杂一些,通常使用协议或者闭包完成
2、通过协议实现反向传值
// 在控制器VC_2中声明协议以及协议方法
protocol ViewControllerProtocol {
func sentData(data:
String)
}
// 控制器VC_2
class ViewController:
UIViewController {
// 声明一个Optional类型的代理属性
var delegate :ViewControllerProtocol?
}
// 在控制器VC_2需要反向传值的地方调用该方法进行协议传值,会在VC_1中的sentData方法中接受到此值
delegate?.sentData(data:"反向传值")
// 在控制器VC_1中遵守协议
class HomeVC:
UIViewController, ViewControllerProtocol
// 在控制器VC_1中需要跳转到VC_2的地方指定代理
let vc =ViewController()
vc.delegate =self
self.present(vc, animated:true, completion:nil)
// 在VC_1中实现协议方法
func sentData(data:
String) {
// data 即为VC_1反向传递过来的值
}
3、通过闭包实现反向传值
// 在控制器VC_2中声明一个Optional值类型的闭包
var closure : ((String) ->Void)?
// 在控制器VC_2需要反向传值的地方调用此方法
self.closure!("反向传值")
// 在控制器VC_1中实现跳转到VC_2的方法,并实现反向传值的闭包,当VC_2需要跳转到VC_1并传值时,只需调用控制器VC_2中反向传值的方法即可
let vc = ViewController()
vc.closure = { (data:
String) in
// data即为反向传过来的值
}
self.present(vc, animated: true,
completion: nil)
相关文章推荐
- 利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值
- 【iOS开发-26】利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值
- 【iOS开发-26】利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值
- iOS开发利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值
- Swift 正向传值以及利用闭包(closure)实现反向传值(七)
- Swift利用闭包(closure)来实现传值-->前后两个控制器的反向传值
- iOS详细解析视图控制器的正向和逆向传值
- Swift利用闭包(closure)来实现传值-->前后两个控制器的反向传值
- Swift利用闭包(closure)来实现传值-->前后两个控制器的反向传值
- Swift利用闭包(closure)回实现传值->前后两个控制器的反向传值
- Swift利用闭包(closure)来实现传值-->前后两个控制器的反向传值
- Swift利用闭包(closure)来实现传值-->前后两个控制器的反向传值
- swift两个视图控制器之间的传值
- 03-UIKit、VC之间正向反向传值、代理
- swift IOS 视图控制器 UIButton UILabel 控件使用
- swift IOS 视图控制器 UIButton UILabel 控件使用
- iOS 导航控制器下级向上级传值,pop反向传值
- MVC5学习笔记――视图与控制器传值的几种方法
- swift3.0三种反向传值
- Ray Wenderlich的swift教程03--提醒视图控制器UIAlertController