1
1
#if IOS || MACCATALYST
2
2
#nullable enable
3
+ using Microsoft . Maui . Platform ;
3
4
using System ;
4
5
using System . Collections . Generic ;
5
6
using System . Linq ;
@@ -58,6 +59,19 @@ internal static partial class Extensions
58
59
return null ;
59
60
}
60
61
62
+ internal static T ? FindResponder < T > ( this UIViewController controller ) where T : UIViewController
63
+ {
64
+ var nextResponder = controller . View as UIResponder ;
65
+ while ( nextResponder is not null )
66
+ {
67
+ nextResponder = nextResponder . NextResponder ;
68
+
69
+ if ( nextResponder is T responder && responder != controller )
70
+ return responder ;
71
+ }
72
+ return null ;
73
+ }
74
+
61
75
internal static UIView ? FindNextView ( this UIView ? view , UIView containerView , Func < UIView , bool > isValidType )
62
76
{
63
77
UIView ? nextView = null ;
@@ -114,6 +128,36 @@ internal static void ChangeFocusedView(this UIView view, UIView? newView)
114
128
else
115
129
newView . BecomeFirstResponder ( ) ;
116
130
}
131
+ internal static T ? FindTopController < T > ( this UIView view ) where T : UIViewController
132
+ {
133
+ var bestController = view . FindResponder < T > ( ) ;
134
+ var tempController = bestController ;
135
+
136
+ while ( tempController is not null )
137
+ {
138
+ tempController = tempController . FindResponder < T > ( ) ;
139
+
140
+ if ( tempController is not null )
141
+ bestController = tempController ;
142
+ }
143
+
144
+ return bestController ;
145
+ }
146
+
147
+ internal static UIView ? GetContainerView ( this UIView ? startingPoint )
148
+ {
149
+ var rootView = startingPoint ? . FindResponder < ContainerViewController > ( ) ? . View ;
150
+
151
+ if ( rootView is not null )
152
+ return rootView ;
153
+
154
+ var firstViewController = startingPoint ? . FindTopController < UIViewController > ( ) ;
155
+
156
+ if ( firstViewController ? . ViewIfLoaded is not null )
157
+ return firstViewController . ViewIfLoaded . FindDescendantView < Microsoft . Maui . Platform . ContentView > ( ) ;
158
+
159
+ return null ;
160
+ }
117
161
}
118
162
}
119
163
#endif
0 commit comments