ios - 未调用 iOS 委托方法
问题描述
我第一次尝试使用委托实现控制器之间的通信。
我有一个 FirstViewController,它在几秒钟后启动 FooTwoViewController,然后 FooTwoViewController 将一些字符串发送回调用 Controller。
我已经实现了它,但我发现我的委托方法没有被调用或者我错误地实现了它。
请在下面查看我的代码:
import UIKit
protocol FooTwoViewControllerDelegate:class {
func myVCDidFinish(_ controller: FooTwoViewController, text: String)
}
class FirstViewController: UIViewController, FooTwoViewControllerDelegate {
var textRecieved = ""
override func viewDidLoad() {
super.viewDidLoad()
// This launches FooTwoViewController after 2 seconds
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController =
storyBoard.instantiateViewController(withIdentifier: "FooTwoViewController") as! FooTwoViewController
self.present(secondViewController, animated: true, completion: nil)
}
}
func myVCDidFinish(_ controller: FooTwoViewController, text: String) {
// THIS DOES NOT PRINT, WHAT AM I MISSING?
print("Data received: \(text)")
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "mySegue" {
let vc = segue.destination as! FooTwoViewController
vc.delegate = self
}
}
}
我的 FooTwoViewController 下面:
import UIKit
class FooTwoViewController: UIViewController {
weak var delegate: FooTwoViewControllerDelegate?
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func ClickMe(_ sender: Any) {
delegate?.myVCDidFinish(self, text: "hey!") //assuming the delegate is assigned otherwise error
self.dismiss(animated: true, completion: nil)
}
}
我的 myVCDidFinish 方法没有被调用,请问我遗漏了什么吗?
解决方案
你需要在delegate
这里设置
let secondViewController = storyBoard.instantiateViewController(withIdentifier: "FooTwoViewController") as! FooTwoViewController
secondViewController.delegate = self
self.present(secondViewController, animated: true, completion: nil)
asprepare(for segue
只用performSegue
like调用
self.performSegue(withIdentifier:"mySegue",sender:nil)
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "mySegue" {
let vc = segue.destination as! FooTwoViewController
vc.delegate = self
}
}
推荐阅读
- django - 如何 Django 反转到 Wagtail 中创建的页面?
- r - 有没有一种简单的方法来计算保留数据集的似然值?
- bash - IFS 不能很好地解析 CSV
- gatsby - 将浏览量事件添加到谷歌标签管理器 + gatsby
- python - 仅在将鼠标移到屏幕上时才更新屏幕,我的代码有问题吗?
- python - gRPC 节点 Js 客户端:“找不到方法”
- javascript - 您可以使用 Array.flatMap 在 Javascript 中返回 n 选择 k 组合吗?
- sharepoint-online - 如何避免 MS Flow 触发循环?
- css - 使用 CSS 强制链接看起来未访问
- python - 更新了已安装的 python 模块以修复错误,现在该怎么办?