UIView 需要推送一个 UIViewController(委托)

Posted

技术标签:

【中文标题】UIView 需要推送一个 UIViewController(委托)【英文标题】:UIView needs to push a UIViewController (delegation) 【发布时间】:2011-06-01 22:12:43 【问题描述】:

我很难理解自定义委托 - 如果有人可以帮助我,我将不胜感激:

我有一个带有标签栏控制器的 UIViewController,每个都包含一个子类 UIView。在其中一个视图中,我有一个 UIButton,我想在其中加载一个 UIDocumentInteractionController。我已经有了执行第二部分的代码,因为文档控制器需要访问 UIViewController 才能被推送到堆栈。

但是我的 UIView 怎样才能访问 UIViewController?

今晚我在 SO 上阅读了很多内容,例如:

做不到 将 UIViewController 设置为 UIView 的属性,以便它知道它属于哪个 在 UIViewController 上调用 nextResponder 代表团

我可以很高兴地点击我的-(void)buttonPressed: (id)sender 方法,但是它应该从这里到哪里来实现委托呢?假设此方法存在于我的视图控制器中,它是否应该触发 [delegate documentRequested: sender] 之类的东西?

提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

我最近发布了有关如何使用自定义委托的详细答案。你可以在这里查看:dismissModalViewController AND pass data back

你要做的是在你的 UIView 中实现协议并将 UIViewController 设置为它的委托。

为了帮助您更好地理解链接的答案,在答案中,secondviewcontroller 相当于您的 UIView,firstviewcontroller 相当于您的 UIViewController。

【讨论】:

太棒了,非常感谢你。我已经让它工作了,而且很完美。我认为我在链接答案中的代码中遗漏的区域是对将委托设置为属性和 respondsToSelector 调用的漠不关心。在您的示例中,用户能够在委托的方法中传递一个字符串。 1 项是我可以发送回 UIViewController 的限制吗? 不!这就是它的美妙之处……你可以传递尽可能多的参数(对象引用、原语等……就像普通方法一样):) 对于多个参数,如果检查的响应选择器看起来会有些不同。我已经编辑了该答案,因为无论如何我都应该提到这一点,因此您可以检查一下... :) 哦,不用说;当您来回传递对象引用时,请记住管理好您的内存。和平... 是的,会的。我正在通过我的子类 UIView,但在我的情况下,我只想通过几个字符串。我确信你可以传入多个参数/对象——只是不完全确定在哪里编辑委托调用。再次感谢您的帮助,很高兴看到代码正常工作:)

以上是关于UIView 需要推送一个 UIViewController(委托)的主要内容,如果未能解决你的问题,请参考以下文章

在 UIView 中将 Traget 添加到 UIButton。收到错误“以 NSException 类型的未捕获异常终止”

推送 UIView 时隐藏 UITabBar

如何从 UIView 推送 UIViewController

从 UIView ios 推送视图控制器

UIView 自动向上 - 从 TabbarController 推送时

为 UITableView 的每一行推送不同的 UIView