在两个容器视图之间进行委派

编程入门 行业动态 更新时间:2024-10-27 10:20:54
本文介绍了在两个容器视图之间进行委派的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在尝试通过代理在 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.

更多推荐

在两个容器视图之间进行委派

本文发布于:2023-07-11 09:31:54,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1093593.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:视图   容器   两个

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!