Skip to content

Commit fa5b344

Browse files
committed
Fix up Keyboard Scroll with latest code
1 parent 5d79c90 commit fa5b344

File tree

3 files changed

+326
-326
lines changed

3 files changed

+326
-326
lines changed

ShanedlerSamples/Library/Common/ViewExtensions.iOS.cs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#if IOS || MACCATALYST
22
#nullable enable
3+
using Microsoft.Maui.Platform;
34
using System;
45
using System.Collections.Generic;
56
using System.Linq;
@@ -58,6 +59,19 @@ internal static partial class Extensions
5859
return null;
5960
}
6061

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+
6175
internal static UIView? FindNextView(this UIView? view, UIView containerView, Func<UIView, bool> isValidType)
6276
{
6377
UIView? nextView = null;
@@ -114,6 +128,36 @@ internal static void ChangeFocusedView(this UIView view, UIView? newView)
114128
else
115129
newView.BecomeFirstResponder();
116130
}
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+
}
117161
}
118162
}
119163
#endif

0 commit comments

Comments
 (0)