summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.MacOS
diff options
context:
space:
mode:
authorBradChase2011 <brchase07@yahoo.com>2017-06-01 06:42:43 -0400
committerRui Marinho <me@ruimarinho.net>2017-06-01 11:42:43 +0100
commit701f0861326cc4b6b4d858bf40c933dfef0a54a1 (patch)
tree91f3d89199664dd064bdeea354908981c62b9537 /Xamarin.Forms.Platform.MacOS
parent20d33c6ce21619b565a90af2ec4ca921581ff2b9 (diff)
downloadxamarin-forms-701f0861326cc4b6b4d858bf40c933dfef0a54a1.tar.gz
xamarin-forms-701f0861326cc4b6b4d858bf40c933dfef0a54a1.tar.bz2
xamarin-forms-701f0861326cc4b6b4d858bf40c933dfef0a54a1.zip
[macOS] bz56855 Implementation of macOS.MasterDetailsPage.IsPresented. (#939)
* bz56855 Implementation of macOS.MasterDetailsPage.IsPresented. * bz56855 Code formatting
Diffstat (limited to 'Xamarin.Forms.Platform.MacOS')
-rw-r--r--Xamarin.Forms.Platform.MacOS/Renderers/MasterDetailPageRenderer.cs67
1 files changed, 65 insertions, 2 deletions
diff --git a/Xamarin.Forms.Platform.MacOS/Renderers/MasterDetailPageRenderer.cs b/Xamarin.Forms.Platform.MacOS/Renderers/MasterDetailPageRenderer.cs
index a22007a3..d8827491 100644
--- a/Xamarin.Forms.Platform.MacOS/Renderers/MasterDetailPageRenderer.cs
+++ b/Xamarin.Forms.Platform.MacOS/Renderers/MasterDetailPageRenderer.cs
@@ -126,27 +126,54 @@ namespace Xamarin.Forms.Platform.MacOS
if (e.PropertyName == "Master" || e.PropertyName == "Detail")
UpdateControllers();
+ else if (e.PropertyName == Xamarin.Forms.MasterDetailPage.IsPresentedProperty.PropertyName)
+ UpdateIsPresented();
+ }
+
+ void UpdateIsPresented()
+ {
+ if (MasterDetailPage == null || SplitView == null)
+ return;
+
+ NSView view = SplitView.Subviews.FirstOrDefault();
+ if (view == null)
+ return;
+
+ if (MasterDetailPage.IsPresented && view.Hidden)
+ view.Hidden = false;
+ else if (!MasterDetailPage.IsPresented && !view.Hidden)
+ view.Hidden = true;
}
void UpdateControllers()
{
ClearControllers();
+ ClearControllers();
+
if (Platform.GetRenderer(MasterDetailPage.Master) == null)
Platform.SetRenderer(MasterDetailPage.Master, Platform.CreateRenderer(MasterDetailPage.Master));
if (Platform.GetRenderer(MasterDetailPage.Detail) == null)
Platform.SetRenderer(MasterDetailPage.Detail, Platform.CreateRenderer(MasterDetailPage.Detail));
+ ViewControllerWrapper masterController = new ViewControllerWrapper(Platform.GetRenderer(MasterDetailPage.Master));
+ masterController.WillAppear -= MasterController_WillAppear;
+ masterController.WillAppear += MasterController_WillAppear;
+ masterController.WillDisappear -= MasterController_WillDisappear;
+ masterController.WillDisappear += MasterController_WillDisappear;
+ ViewControllerWrapper detailController = new ViewControllerWrapper(Platform.GetRenderer(MasterDetailPage.Detail));
+
AddSplitViewItem(new NSSplitViewItem
{
- ViewController = new ViewControllerWrapper(Platform.GetRenderer(MasterDetailPage.Master))
+ ViewController = masterController
});
AddSplitViewItem(new NSSplitViewItem
{
- ViewController = new ViewControllerWrapper(Platform.GetRenderer(MasterDetailPage.Detail))
+ ViewController = detailController
});
UpdateChildrenLayout();
+ UpdateIsPresented();
}
void ClearControllers()
@@ -155,6 +182,8 @@ namespace Xamarin.Forms.Platform.MacOS
{
var splitItem = SplitViewItems.Last();
var childVisualRenderer = splitItem.ViewController as ViewControllerWrapper;
+ childVisualRenderer.WillAppear -= MasterController_WillAppear;
+ childVisualRenderer.WillDisappear -= MasterController_WillDisappear;
RemoveSplitViewItem(splitItem);
IVisualElementRenderer render = null;
if (childVisualRenderer.RendererWeakRef.TryGetTarget(out render))
@@ -171,9 +200,29 @@ namespace Xamarin.Forms.Platform.MacOS
{
}
+ private void MasterController_WillDisappear(object sender, EventArgs e)
+ {
+ if (Element == null || MasterDetailPage == null)
+ return;
+
+ if (MasterDetailPage.CanChangeIsPresented && MasterDetailPage.IsPresented)
+ Element.SetValueFromRenderer(MasterDetailPage.IsPresentedProperty, false);
+ }
+
+ private void MasterController_WillAppear(object sender, EventArgs e)
+ {
+ if (Element == null || MasterDetailPage == null)
+ return;
+
+ if (MasterDetailPage.CanChangeIsPresented && !MasterDetailPage.IsPresented)
+ Element.SetValueFromRenderer(MasterDetailPage.IsPresentedProperty, true);
+ }
+
sealed class ViewControllerWrapper : NSViewController
{
internal WeakReference<IVisualElementRenderer> RendererWeakRef;
+ public event EventHandler WillAppear;
+ public event EventHandler WillDisappear;
public ViewControllerWrapper(IVisualElementRenderer renderer)
{
@@ -191,6 +240,20 @@ namespace Xamarin.Forms.Platform.MacOS
base.ViewWillLayout();
}
+ public override void ViewWillAppear()
+ {
+ base.ViewWillAppear();
+ if (WillAppear != null)
+ WillAppear(this, EventArgs.Empty);
+ }
+
+ public override void ViewWillDisappear()
+ {
+ base.ViewWillDisappear();
+ if (WillDisappear != null)
+ WillDisappear(this, EventArgs.Empty);
+ }
+
protected override void Dispose(bool disposing)
{
if (disposing && RendererWeakRef != null)