Swift UIViewController中的delegate方式传值
2017-08-10 19:39
260 查看
ios swift开发中有几种方式传值,看到简书上一篇不错的文章。
链接:http://www.jianshu.com/p/3e1173652996
一.通过segue进行传值
二.通过delegate进行传值
三.通过Notification进行传值
四.通过回调函数进行传值
需求:
我们经常会使用navigationViewController,使用segue拉拉线,就可以实现页面跳转,使用prepareForSegue方便进行参数的正向传递,但我们也许也有的业务会是反向的传递参数,这个时候需要使用delegate。
假设有两个vc,事先做好了segue拉线,设置了按钮啥的,然后可以直接正向跳转,以及因为在一个navigation里面所以,第二个vc有个默认的back(发送并返回,这里即“发送给A“按钮)按钮可以反向的跳转,第一个是avc,第二个是bvc, 在bvc中我们写一个协议protocol,当然这个协议是写在类外面的,只是和类在同一个swift文件中。
![](http://upload-images.jianshu.io/upload_images/151218-0e0b9c3dc32e047b.png?imageView2/2/w/1240/q/100)
![](http://upload-images.jianshu.io/upload_images/151218-3e028bf46dc2b0b7.png?imageView2/2/w/1240/q/100)
通过segue和delegate正反向进行传值
这个例子AViewController 通过 segue 传值 BViewController,BViewController 通过delegate 传值 。1、AViewController的代码如下:
2、SendMessageDelegate和BViewController的代码如下:
链接:http://www.jianshu.com/p/3e1173652996
一.通过segue进行传值
二.通过delegate进行传值
三.通过Notification进行传值
四.通过回调函数进行传值
需求:
我们经常会使用navigationViewController,使用segue拉拉线,就可以实现页面跳转,使用prepareForSegue方便进行参数的正向传递,但我们也许也有的业务会是反向的传递参数,这个时候需要使用delegate。
假设有两个vc,事先做好了segue拉线,设置了按钮啥的,然后可以直接正向跳转,以及因为在一个navigation里面所以,第二个vc有个默认的back(发送并返回,这里即“发送给A“按钮)按钮可以反向的跳转,第一个是avc,第二个是bvc, 在bvc中我们写一个协议protocol,当然这个协议是写在类外面的,只是和类在同一个swift文件中。
![](http://upload-images.jianshu.io/upload_images/151218-0e0b9c3dc32e047b.png?imageView2/2/w/1240/q/100)
![](http://upload-images.jianshu.io/upload_images/151218-3e028bf46dc2b0b7.png?imageView2/2/w/1240/q/100)
通过segue和delegate正反向进行传值
这个例子AViewController 通过 segue 传值 BViewController,BViewController 通过delegate 传值 。1、AViewController的代码如下:
import UIKit class AViewController: UIViewController { @IBOutlet weak var receiveLabel: UILabel! @IBAction func sendBtnAction(sender: AnyObject) { self.performSegueWithIdentifier("toBviewController", sender: nil) } @IBOutlet weak var textField: UITextField! override func viewDidLoad() { super.viewDidLoad() } // 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?) { if(segue.identifier == "toBviewController"){ var bVc:BViewController = segue.destinationViewController as BViewController bVc.tempString = textField.text bVc.delegate = self } } } extension AViewController:SendMessageDelegate{ func sendWord(message: String) { receiveLabel.text = message } }
2、SendMessageDelegate和BViewController的代码如下:
import UIKit protocol SendMessageDelegate{ func sendWord(message : String) } class BViewController: UIViewController { @IBOutlet weak var receiveLabel: UILabel! @IBAction func sendBtnAction(sender: AnyObject) { if((delegate) != nil){ self.delegate?.sendWord(te 4000 xtField.text) self.navigationController?.popViewControllerAnimated(true) } } @IBOutlet weak var textField: UITextField! var tempString:String? var delegate : SendMessageDelegate? override func viewDidLoad() { super.viewDidLoad() self.receiveLabel.text = tempString } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
相关文章推荐
- Swift UIViewController中的delegate方式传值
- iOS之UIViewController执行返回操作并传递参数值的两种方式
- Xcode 8, Swift 3: “Expression of type UIViewController? is unused” warning
- AppDelegate单例模式、通过StoryBoardId加载ViewController Swift
- swift UIViewController生命周期
- iOS UIViewController之间的传值方式之一:委托代理
- Swift开发--多个UIViewController之间传值
- swift UIViewController生命周期
- Swift实现UIScrollView展示多个UIViewController
- swift中UIViewController的使用
- UIViewController的表现方式
- PresentModel UIViewController 的动画方式
- spring mvc 的两种配置方式继承controller和xml配置delegate
- UIViewController详解--Swift版本
- IOS之UIViewController执行返回操作并传递参数值的两种方式
- IOS之UIViewController执行返回操作并传递参数值的两种方式
- IOS第12天(1,UIViewController控制器的创建的 三种方式,和第一个view创建)
- IOS之UIViewController执行返回操作并传递参数值的两种方式
- Xcode 8 / Swift 3: “Expression of type UIViewController? is unused” warning
- IOS UIViewController隐藏statusbar方式