SettingsViewController: Release correctly the pushed view controller

This commit is contained in:
Giom Foret
2017-08-16 09:55:52 +02:00
parent 6f70d2e283
commit 4318970da7
@@ -203,6 +203,9 @@ typedef void (^blockSettingsViewController_onReadyToDestroy)();
// The user interface theme cell
TableViewCellWithCheckBoxes *uiThemeCell;
// The current pushed view controller
UIViewController *pushedViewController;
}
/**
@@ -325,6 +328,9 @@ typedef void (^blockSettingsViewController_onReadyToDestroy)();
- (void)destroy
{
// Release the potential pushed view controller
[self releasePushedViewController];
if (documentInteractionController)
{
[documentInteractionController dismissPreviewAnimated:NO];
@@ -388,6 +394,9 @@ typedef void (^blockSettingsViewController_onReadyToDestroy)();
[tracker send:[[GAIDictionaryBuilder createScreenView] build]];
}
// Release the potential pushed view controller
[self releasePushedViewController];
// Refresh display
[self refreshSettings];
@@ -455,12 +464,39 @@ typedef void (^blockSettingsViewController_onReadyToDestroy)();
- (void)pushViewController:(UIViewController*)viewController
{
// Keep ref on pushed view controller
pushedViewController = viewController;
// Hide back button title
self.navigationItem.backBarButtonItem =[[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
[self.navigationController pushViewController:viewController animated:YES];
}
- (void)releasePushedViewController
{
if (pushedViewController)
{
if ([pushedViewController isKindOfClass:[UINavigationController class]])
{
UINavigationController *navigationController = (UINavigationController*)pushedViewController;
for (id subViewController in navigationController.viewControllers)
{
if ([subViewController respondsToSelector:@selector(destroy)])
{
[subViewController destroy];
}
}
}
else if ([pushedViewController respondsToSelector:@selector(destroy)])
{
[(id)pushedViewController destroy];
}
pushedViewController = nil;
}
}
- (void)dismissKeyboard
{
[currentPasswordTextField resignFirstResponder];