有没有一种从UIView到UIViewController的内置方法?我知道你可以通过[self view]从UIViewController转到它的UIView,但是我想知道是否有反向引用?
发布于 2015-12-05 13:49:43
这肯定是一个糟糕的想法和错误的设计,但我相信我们都可以享受@Phil_M提出的最佳答案的快速解决方案:
static func firstAvailableUIViewController(fromResponder responder: UIResponder) -> UIViewController? {
func traverseResponderChainForUIViewController(responder: UIResponder) -> UIViewController? {
if let nextResponder = responder.nextResponder() {
if let nextResp = nextResponder as? UIViewController {
return nextResp
} else {
return traverseResponderChainForUIViewController(nextResponder)
}
}
return nil
}
return traverseResponderChainForUIViewController(responder)
}如果您的目的是做一些简单的事情,比如显示一个模式对话框或跟踪数据,这并不能证明使用协议是合理的。我个人将这个函数存储在一个实用程序对象中,您可以在实现UIResponder协议的任何东西中使用它,如下所示:
if let viewController = MyUtilityClass.firstAvailableUIViewController(self) {}所有功劳都归于@Phil_M
https://stackoverflow.com/questions/1340434
复制相似问题