本文介绍了在两个 ViewController(委托)之间传递数据 - Swift的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!
问题描述
限时送ChatGPT账号..
我有两个 ViewController.
FirstVC- 我有label和button与 segue "modal"
FirstVC- I havelabelandbuttonwith segue "modal"
SecondVC - 我有 PickerView 和 button(返回 FirstVC):
SecondVC - I have PickerView and button (back to FirstVC):
@IBAction func bntback(sender: AnyObject) {
self.dissmissViewControllerAnimatied(true, completion: nil)
}
我在 SecondViewController 中创建了委托:
And I created delegate in SecondViewController as:
protocol SendDataDelegate {
func sendData(text:String)
}
下一步:
class SecondVC: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
var delegate: SendDataDelegate!
var firstvc = FirstVC()
var arr = ["First", "Second", "Third"]
@IBOutlet var pickview: UIPickerView!
override func viewDidLoad() {
super.viewDidLoad()
pickview.dataSource = self
pickview.selegate = self
}
我的 PickerView 函数,在这个函数中我使用我的委托作为:
My function of PickerView and in this function I use my delegate as:
func pickerView (pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
var text = arr[row]
dispatch_async(dispatch_get_main_quene(), {
self.delegate.sendData(text)//there is an error: "fatal error: unexpectedly found nil while unwrapping an Optional value"
)}
}
第一VC:
class FirstVC: UIViewController, SendDataDelegate {
var data = SecondVC()
//....
override func viewDidLoad() {
super.viewDidLoad()
self.data.delegate = self
}
func sendData (text:String) {
mylable.text = text
//or
//var txt = text
//mylable.text = txt
}
}
请帮我解决这个问题.
推荐答案
1) 你需要将delegate设置成prepareForSegue:
1) You need to set delegate into prepareForSegue:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let viewController = segue.destinationViewController as? SecondVC {
viewController.delegate = self
}
}
更新:
2) 将 delegate 设置为可选
2) Set delegate as Optional
class SecondVC: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
var delegate: SendDataDelegate?
...
func pickerView (pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
var text = arr[row]
dispatch_async(dispatch_get_main_quene(), {
self.delegate?.sendData(text)
)}
}
这篇关于在两个 ViewController(委托)之间传递数据 - Swift的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!
The End


大气响应式网络建站服务公司织梦模板
高端大气html5设计公司网站源码
织梦dede网页模板下载素材销售下载站平台(带会员中心带筛选)
财税代理公司注册代理记账网站织梦模板(带手机端)
成人高考自考在职研究生教育机构网站源码(带手机端)
高端HTML5响应式企业集团通用类网站织梦模板(自适应手机端)