视图控制器的设置委托问题?

Posted

技术标签:

【中文标题】视图控制器的设置委托问题?【英文标题】:issue with Setting delegate of viewcontoller? 【发布时间】:2016-11-17 05:35:58 【问题描述】:

我有两个视图控制器 A 和 B。从我将一些数据发送回 A 视图控制器。我的 B ViewController 嵌入在 NavigationController 中。现在我要从下面的代码从 A 到 B。在这种情况下,我的委托方法不会被调用。

let storyboard = UIStoryboard(name: "DropboxView", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "nav_drop") as! UINavigationController
let vc1:DropboxListingViewController = storyboard.instantiateViewController(withIdentifier: "DropboxListingViewController") as! DropboxListingViewController
vc1.CTprotocolDelegate = self
self.present(vc, animated: true, completion: nil) 

请提出更好的方法。

【问题讨论】:

你的委托方法永远不会被调用是什么意思?您在哪里尝试调用委托方法? 在第一个视图控制器中 【参考方案1】:

您需要从您的UINavigationController 对象访问DropboxListingViewController,在您的情况下它是vc,就像这样。

let storyboard = UIStoryboard(name: "DropboxView", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "nav_drop") as! UINavigationController
if let vc1 = vc.viewControllers.first as? DropboxListingViewController 
    vc1.CTprotocolDelegate = self
    self.present(vc, animated: true, completion: nil) 

【讨论】:

【参考方案2】:

Nirav D 是正确的。

实际上,您的代码的问题在于它正在创建视图控制器“DropboxListingViewController”的两个实例。您将当前视图控制器设置为委托的实例实际上从未加载到内存中,而是导航控制器创建了自己的“DropboxListingViewController”实例,您尚未注册自己。 @deepak

【讨论】:

以上是关于视图控制器的设置委托问题?的主要内容,如果未能解决你的问题,请参考以下文章

无法设置视图控制器的委托

将容器控制器(根视图控制器)设置为 UITabBarController 中视图控制器的委托

如何设置滚动视图委托? [关闭]

如何在swift 3中从一个视图控制器传递到上一个视图控制器时设置委托?

如何在视图控制器之外设置数据源和委托

将委托设置为视图控制器时 UITextField 停止工作