親のViewやViewControllerを取得する方法
私はUIViewの拡張クラスを作成しています。
UIView+.swift
import UIKit
extension UIView {
func parentViewController() -> UIViewController? {
var parentResponder: UIResponder? = self
while true {
guard let nextResponder = parentResponder?.next else { return nil }
if let viewController = nextResponder as? UIViewController {
return viewController
}
parentResponder = nextResponder
}
}
func parentView<T: UIView>(type: T.Type) -> T? {
var parentResponder: UIResponder? = self
while true {
guard let nextResponder = parentResponder?.next else { return nil }
if let view = nextResponder as? T {
return view
}
parentResponder = nextResponder
}
}
}
使い方
if let parentVC = self.parentViewController() as? 〇〇ViewController {
}