本文介绍了在两个容器视图之间进行委派的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试通过代理在 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 your BottomContainerViewController.
- 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.
更多推荐
在两个容器视图之间进行委派
发布评论