モノトーンの伝説日記

Apex Legends, Splatoon, Programming, and so on...

<mini> C#: UIViewから親のViewControllerを取得するためのExtension

 [Swift] UIViewから親のViewControllerを取得するためのExtension

の C# バージョン。

 MIT ライセンスで。

 generics 版と非 generics 版両方書いてる。特に意味はない。正直非 generics 版使う予定なさそう。

namespace UIKit
{
    public static class UIViewExtensions
    {
        public static UIViewController GetParentViewController(this UIView view)
        {
            UIResponder parentResponder = view;
            while (parentResponder != null)
            {
                var nextResponder = parentResponder.NextResponder;
                if (nextResponder is UIViewController viewController)
                    return viewController;
                parentResponder = nextResponder;
            }
            return null;
        }

        public static T GetParentViewController<T>(this UIView view)
            where T: UIViewController
        {
            UIResponder parentResponder = view;
            while (parentResponder != null)
            {
                var nextResponder = parentResponder.NextResponder;
                if (nextResponder is T viewController)
                    return viewController;
                parentResponder = nextResponder;
            }
            return null;
        }
    }
}