From e3191821bae99fb52d32644566cd14a8f496e36a Mon Sep 17 00:00:00 2001 From: Paul DiPietro Date: Wed, 6 Apr 2016 22:53:52 -0700 Subject: [PATCH] [iOS] ViewCellRenderer did not set RealCellProperty In the iOS ViewCellRenderer, GetRealCell in ViewCellPropertyChanged was returning null and passing it to UpdateIsEnabled. SetRealCell was never being called in ViewCellRenderer and the RealCellProperty was never being set. --- .../Bugzilla36955.cs | 62 ++++++++++++++++++++++ .../Xamarin.Forms.Controls.Issues.Shared.projitems | 1 + .../Cells/ViewCellRenderer.cs | 2 + 3 files changed, 65 insertions(+) create mode 100644 Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla36955.cs diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla36955.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla36955.cs new file mode 100644 index 0000000..4f1a8e7 --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla36955.cs @@ -0,0 +1,62 @@ +using System; + +using Xamarin.Forms.CustomAttributes; +#if UITEST +using Xamarin.UITest; +using Xamarin.UITest.iOS; +using Xamarin.UITest.Queries; +using NUnit.Framework; +#endif + +namespace Xamarin.Forms.Controls.Issues +{ + [Preserve(AllMembers = true)] + [Issue(IssueTracker.Bugzilla, 36955, "[iOS] ViewCellRenderer.UpdateIsEnabled referencing null object", PlatformAffected.iOS)] + public class Bugzilla36955 : TestContentPage + { + protected override void Init() + { + var ts = new TableSection(); + var tr = new TableRoot { ts }; + var tv = new TableView(tr); + + var sc = new SwitchCell + { + Text = "Toggle switch; nothing should crash" + }; + + var button = new Button(); + button.SetBinding(Button.TextProperty, new Binding("On", source: sc)); + + var vc = new ViewCell + { + View = button + }; + vc.SetBinding(IsEnabledProperty, new Binding("On", source: sc)); + + ts.Add(sc); + ts.Add(vc); + + Content = tv; + } + +#if UITEST + [Test] + public void Bugzilla36955Test() + { + if (RunningApp is iOSApp) + { + AppResult[] buttonFalse = RunningApp.Query(q => q.Button().Text("False")); + Assert.AreEqual(buttonFalse.Length == 1, true); + RunningApp.Tap(q => q.Class("Switch")); + AppResult[] buttonTrue = RunningApp.Query(q => q.Button().Text("True")); + Assert.AreEqual(buttonTrue.Length == 1, true); + } + else + { + Assert.Inconclusive("Test is only run on iOS."); + } + } +#endif + } +} diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems index f843a2e..93de60b 100644 --- a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems @@ -68,6 +68,7 @@ + diff --git a/Xamarin.Forms.Platform.iOS/Cells/ViewCellRenderer.cs b/Xamarin.Forms.Platform.iOS/Cells/ViewCellRenderer.cs index b141629..54f3c1e 100644 --- a/Xamarin.Forms.Platform.iOS/Cells/ViewCellRenderer.cs +++ b/Xamarin.Forms.Platform.iOS/Cells/ViewCellRenderer.cs @@ -35,6 +35,8 @@ namespace Xamarin.Forms.Platform.iOS viewCell.PropertyChanged += ViewCellPropertyChanged; cell.ViewCell = viewCell; + SetRealCell(item, cell); + WireUpForceUpdateSizeRequested(item, cell, tv); UpdateBackground(cell, item); -- 2.7.4