From 9c436e04181349c7adce95756b9216903723d206 Mon Sep 17 00:00:00 2001 From: Kyle Bashour Date: Fri, 7 Jan 2022 15:52:40 -0800 Subject: [PATCH 1/2] Always remove child view controller --- .../DescribedViewController.swift | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/WorkflowUI/Sources/ViewControllerDescription/DescribedViewController.swift b/WorkflowUI/Sources/ViewControllerDescription/DescribedViewController.swift index 3e6c6c000..25d8b8b45 100644 --- a/WorkflowUI/Sources/ViewControllerDescription/DescribedViewController.swift +++ b/WorkflowUI/Sources/ViewControllerDescription/DescribedViewController.swift @@ -42,19 +42,21 @@ if description.canUpdate(viewController: currentViewController) { description.update(viewController: currentViewController) } else { - if isViewLoaded { - currentViewController.willMove(toParent: nil) - currentViewController.view.removeFromSuperview() - currentViewController.removeFromParent() - } + currentViewController.willMove(toParent: nil) + currentViewController.viewIfLoaded?.removeFromSuperview() + currentViewController.removeFromParent() + currentViewController = description.buildViewController() + + addChild(currentViewController) + if isViewLoaded { - addChild(currentViewController) - view.addSubview(currentViewController.view) currentViewController.view.frame = view.bounds - currentViewController.didMove(toParent: self) + view.addSubview(currentViewController.view) updatePreferredContentSizeIfNeeded() } + + currentViewController.didMove(toParent: self) } } From 629933221705d4101b86d58af40f61486cbe275d Mon Sep 17 00:00:00 2001 From: Kyle Bashour Date: Fri, 7 Jan 2022 16:11:26 -0800 Subject: [PATCH 2/2] Add and fix tests --- WorkflowUI/Tests/DescribedViewControllerTests.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/WorkflowUI/Tests/DescribedViewControllerTests.swift b/WorkflowUI/Tests/DescribedViewControllerTests.swift index 00052a938..ed1ae499d 100644 --- a/WorkflowUI/Tests/DescribedViewControllerTests.swift +++ b/WorkflowUI/Tests/DescribedViewControllerTests.swift @@ -108,10 +108,11 @@ // Then XCTAssertNotEqual(initialChildViewController, describedViewController.currentViewController) + XCTAssertNil(initialChildViewController.parent) XCTAssertEqual((describedViewController.currentViewController as? MessageViewController)?.message, "Test") XCTAssertFalse(describedViewController.isViewLoaded) XCTAssertFalse(describedViewController.currentViewController.isViewLoaded) - XCTAssertNil(describedViewController.currentViewController.parent) + XCTAssertEqual(describedViewController.currentViewController.parent, describedViewController) } func test_update_toIncompatibleDescription_afterViewLoads() {