summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.iOS
diff options
context:
space:
mode:
authoradrianknight89 <adrianknight89@outlook.com>2017-02-15 05:39:02 -0600
committerRui Marinho <me@ruimarinho.net>2017-02-15 11:39:02 +0000
commit1d8e098e2a85d5f82eeb816f7e12c3c8e9381262 (patch)
treea747aa4fb24f5d41fb59a4325319adf1a70d7efb /Xamarin.Forms.Platform.iOS
parent340a705c5e2f912f97e8e276215de4ff20583e59 (diff)
downloadxamarin-forms-1d8e098e2a85d5f82eeb816f7e12c3c8e9381262.tar.gz
xamarin-forms-1d8e098e2a85d5f82eeb816f7e12c3c8e9381262.tar.bz2
xamarin-forms-1d8e098e2a85d5f82eeb816f7e12c3c8e9381262.zip
[iOS] MasterDetailPage master icon should be changeable from any page on the stack (#608)
* master detail page master icon could be changed from any page on the stack * change icon names * added titles
Diffstat (limited to 'Xamarin.Forms.Platform.iOS')
-rw-r--r--Xamarin.Forms.Platform.iOS/Renderers/NavigationRenderer.cs61
-rw-r--r--Xamarin.Forms.Platform.iOS/Renderers/PhoneMasterDetailRenderer.cs15
2 files changed, 45 insertions, 31 deletions
diff --git a/Xamarin.Forms.Platform.iOS/Renderers/NavigationRenderer.cs b/Xamarin.Forms.Platform.iOS/Renderers/NavigationRenderer.cs
index e742fcee..e054a2d3 100644
--- a/Xamarin.Forms.Platform.iOS/Renderers/NavigationRenderer.cs
+++ b/Xamarin.Forms.Platform.iOS/Renderers/NavigationRenderer.cs
@@ -35,8 +35,6 @@ namespace Xamarin.Forms.Platform.iOS
var parentingViewController = (ParentingViewController)ViewControllers.Last();
UpdateLeftBarButtonItem(parentingViewController);
});
-
-
}
Page Current { get; set; }
@@ -621,34 +619,7 @@ namespace Xamarin.Forms.Platform.iOS
if ((firstPage != pageBeingRemoved && currentChild != firstPage && NavigationPage.GetHasBackButton(currentChild)) || _parentMasterDetailPage == null)
return;
- if (!_parentMasterDetailPage.ShouldShowToolbarButton())
- {
- containerController.NavigationItem.LeftBarButtonItem = null;
- return;
- }
-
- var shouldUseIcon = _parentMasterDetailPage.Master.Icon != null;
- if (shouldUseIcon)
- {
- try
- {
- containerController.NavigationItem.LeftBarButtonItem =
- new UIBarButtonItem(new UIImage(_parentMasterDetailPage.Master.Icon), UIBarButtonItemStyle.Plain,
- (o, e) => _parentMasterDetailPage.IsPresented = !_parentMasterDetailPage.IsPresented);
- }
- catch (Exception)
- {
- // Throws Exception otherwise would catch more specific exception type
- shouldUseIcon = false;
- }
- }
-
- if (!shouldUseIcon)
- {
- containerController.NavigationItem.LeftBarButtonItem = new UIBarButtonItem(_parentMasterDetailPage.Master.Title,
- UIBarButtonItemStyle.Plain,
- (o, e) => _parentMasterDetailPage.IsPresented = !_parentMasterDetailPage.IsPresented);
- }
+ SetMasterLeftBarButton(containerController, _parentMasterDetailPage);
}
void UpdateTint()
@@ -681,6 +652,36 @@ namespace Xamarin.Forms.Platform.iOS
}
}
+ internal static void SetMasterLeftBarButton(UIViewController containerController, MasterDetailPage masterDetailPage)
+ {
+ if (!masterDetailPage.ShouldShowToolbarButton())
+ {
+ containerController.NavigationItem.LeftBarButtonItem = null;
+ return;
+ }
+
+ EventHandler handler = (o, e) => masterDetailPage.IsPresented = !masterDetailPage.IsPresented;
+
+ bool shouldUseIcon = masterDetailPage.Master.Icon != null;
+ if (shouldUseIcon)
+ {
+ try
+ {
+ containerController.NavigationItem.LeftBarButtonItem = new UIBarButtonItem(new UIImage(masterDetailPage.Master.Icon), UIBarButtonItemStyle.Plain, handler);
+ }
+ catch (Exception)
+ {
+ // Throws Exception otherwise would catch more specific exception type
+ shouldUseIcon = false;
+ }
+ }
+
+ if (!shouldUseIcon)
+ {
+ containerController.NavigationItem.LeftBarButtonItem = new UIBarButtonItem(masterDetailPage.Master.Title, UIBarButtonItemStyle.Plain, handler);
+ }
+ }
+
class SecondaryToolbar : UIToolbar
{
readonly List<UIView> _lines = new List<UIView>();
diff --git a/Xamarin.Forms.Platform.iOS/Renderers/PhoneMasterDetailRenderer.cs b/Xamarin.Forms.Platform.iOS/Renderers/PhoneMasterDetailRenderer.cs
index b26e3148..fbadc772 100644
--- a/Xamarin.Forms.Platform.iOS/Renderers/PhoneMasterDetailRenderer.cs
+++ b/Xamarin.Forms.Platform.iOS/Renderers/PhoneMasterDetailRenderer.cs
@@ -218,7 +218,7 @@ namespace Xamarin.Forms.Platform.iOS
void HandleMasterPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == Page.IconProperty.PropertyName || e.PropertyName == Page.TitleProperty.PropertyName)
- MessagingCenter.Send<IVisualElementRenderer>(this, NavigationRenderer.UpdateToolbarButtons);
+ UpdateLeftBarButton();
}
void HandlePropertyChanged(object sender, PropertyChangedEventArgs e)
@@ -321,6 +321,19 @@ namespace Xamarin.Forms.Platform.iOS
SetNeedsStatusBarAppearanceUpdate();
}
+ void UpdateLeftBarButton()
+ {
+ var masterDetailPage = Element as MasterDetailPage;
+ if (!(masterDetailPage?.Detail is NavigationPage))
+ return;
+
+ var detailRenderer = Platform.GetRenderer(masterDetailPage.Detail) as UINavigationController;
+
+ UIViewController firstPage = detailRenderer?.ViewControllers.FirstOrDefault();
+ if (firstPage != null)
+ NavigationRenderer.SetMasterLeftBarButton(firstPage, masterDetailPage);
+ }
+
public override UIViewController ChildViewControllerForStatusBarHidden()
{
if (((MasterDetailPage)Element).Detail != null)