diff options
author | adrianknight89 <adrianknight89@outlook.com> | 2017-02-15 05:39:02 -0600 |
---|---|---|
committer | Rui Marinho <me@ruimarinho.net> | 2017-02-15 11:39:02 +0000 |
commit | 1d8e098e2a85d5f82eeb816f7e12c3c8e9381262 (patch) | |
tree | a747aa4fb24f5d41fb59a4325319adf1a70d7efb /Xamarin.Forms.Platform.iOS | |
parent | 340a705c5e2f912f97e8e276215de4ff20583e59 (diff) | |
download | xamarin-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.cs | 61 | ||||
-rw-r--r-- | Xamarin.Forms.Platform.iOS/Renderers/PhoneMasterDetailRenderer.cs | 15 |
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) |