在两个容器视图之间进行委派 [英] Delegation between two container views
本文介绍了在两个容器视图之间进行委派的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试通过代理<2>在 Swift
中的两个容器视图
之间发送信息。 / strong>,执行协议功能时,我会不断收到展开错误。
I'm trying to send information between two Container Views
in Swift
, through a delegate and I keep getting unwrapping error when performing the protocol function.
topContainerViewController.swift
import UIKit
protocol topContainerDelegate{
func send(text:String)
}
class topContainerViewController: UIViewController {
var delegate: topContainerDelegate! = nil
@IBOutlet var textField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func sendMessage(sender: AnyObject) {
delegate!.send(textField.text!)
}
}
bottomContainerViewController。 swift
import UIKit
class bottomContainerViewController: UIViewController, topContainerDelegate {
@IBOutlet var messageLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
func send(text: String) {
messageLabel.text = text
}
}
问题
如何正确设置两个容器视图之间的委托?
Question
How do I properly set up delegation between two container views?
推荐答案
您的代码存在问题是:
- 您从未在<$ c中将委托设置为
self
$ c> BottomContainerViewController 。 - 在您的
TopContainerViewController
中,将代表的初始值设置为nil,然后离开
- you were never setting your delegate to
self
in yourBottomContainerViewController
. - In your
TopContainerViewController
you set your delegates initial value to nil, just leave it as an optional and use a guard to unwrap it.
在我的测试应用程序中有效:
This works in my test application:
protocol TopContainerDelegate : class {
func send(text:String)
}
class TopContainerViewController: UIViewController {
@IBOutlet weak var textField: UITextField!
weak var delegate : TopContainerDelegate?
@IBAction func sendMessage(sender: UIButton) {
guard let delegate = delegate else {
return
}
delegate.send(textField.text!)
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
class BottomContainerViewController: UIViewController, TopContainerDelegate {
@IBOutlet weak var messageLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
let app = UIApplication.sharedApplication().delegate! as! AppDelegate
if let viewControllers = app.window?.rootViewController?.childViewControllers {
viewControllers.forEach { vc in
if let cont = vc as? TopContainerViewController {
cont.delegate = self
}
}
}
}
func send(text:String) {
messageLabel.text = text
}
}
如果还有其他问题问题可以随时下载我的工作项目并自己进行测试。
If you have any further questions feel free to download my working project and test it out for yourself.
这篇关于在两个容器视图之间进行委派的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文