From 150adeb58189474b81e910e9022612cfe913d1ff Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Sun, 17 Nov 2019 14:31:07 -0500 Subject: [PATCH] Use custom navigation controller for preferences to override viewWillDisappear method and send preferences changed notification Workaround for #36 --- Tusker.xcodeproj/project.pbxproj | 4 +++ .../PreferencesNavigationController.swift | 35 +++++++++++++++++++ .../MyProfileTableViewController.swift | 6 +--- 3 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 Tusker/Screens/Preferences/PreferencesNavigationController.swift diff --git a/Tusker.xcodeproj/project.pbxproj b/Tusker.xcodeproj/project.pbxproj index 399ecf4f..7df6bae5 100644 --- a/Tusker.xcodeproj/project.pbxproj +++ b/Tusker.xcodeproj/project.pbxproj @@ -89,6 +89,7 @@ D6333B372137838300CE884A /* AttributedString+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6333B362137838300CE884A /* AttributedString+Helpers.swift */; }; D6333B772138D94E00CE884A /* ComposeMediaView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6333B762138D94E00CE884A /* ComposeMediaView.swift */; }; D6333B792139AEFD00CE884A /* Date+TimeAgo.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6333B782139AEFD00CE884A /* Date+TimeAgo.swift */; }; + D63661C02381C144004B9E16 /* PreferencesNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D63661BF2381C144004B9E16 /* PreferencesNavigationController.swift */; }; D640D76922BAF5E6004FBE69 /* DomainBlocks.plist in Resources */ = {isa = PBXBuildFile; fileRef = D640D76822BAF5E6004FBE69 /* DomainBlocks.plist */; }; D641C773213CAA25004B4513 /* NotificationsTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D641C772213CAA25004B4513 /* NotificationsTableViewController.swift */; }; D641C77F213DC78A004B4513 /* InlineTextAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = D641C77E213DC78A004B4513 /* InlineTextAttachment.swift */; }; @@ -348,6 +349,7 @@ D6333B362137838300CE884A /* AttributedString+Helpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AttributedString+Helpers.swift"; sourceTree = ""; }; D6333B762138D94E00CE884A /* ComposeMediaView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeMediaView.swift; sourceTree = ""; }; D6333B782139AEFD00CE884A /* Date+TimeAgo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Date+TimeAgo.swift"; sourceTree = ""; }; + D63661BF2381C144004B9E16 /* PreferencesNavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesNavigationController.swift; sourceTree = ""; }; D640D76822BAF5E6004FBE69 /* DomainBlocks.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = DomainBlocks.plist; sourceTree = ""; }; D641C772213CAA25004B4513 /* NotificationsTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationsTableViewController.swift; sourceTree = ""; }; D641C77E213DC78A004B4513 /* InlineTextAttachment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InlineTextAttachment.swift; sourceTree = ""; }; @@ -811,6 +813,7 @@ D641C789213DD87E004B4513 /* Preferences */ = { isa = PBXGroup; children = ( + D63661BF2381C144004B9E16 /* PreferencesNavigationController.swift */, 04586B4022B2FFB10021BD04 /* PreferencesView.swift */, 04586B4222B301470021BD04 /* AppearancePrefsView.swift */, 0427033722B30F5F000D31B6 /* BehaviorPrefsView.swift */, @@ -1593,6 +1596,7 @@ D663626421360D2300C9CBA2 /* AvatarStyle.swift in Sources */, D679C09F215850EF00DA27FE /* XCBActions.swift in Sources */, D6DD353F22F502EC00A9563A /* Preferences+Notification.swift in Sources */, + D63661C02381C144004B9E16 /* PreferencesNavigationController.swift in Sources */, D6AEBB4523216AF800E5038B /* FollowAccountActivity.swift in Sources */, D6538945214D6D7500E3CEFC /* TableViewSwipeActionProvider.swift in Sources */, D6E0DC8E216EDF1E00369478 /* Previewing.swift in Sources */, diff --git a/Tusker/Screens/Preferences/PreferencesNavigationController.swift b/Tusker/Screens/Preferences/PreferencesNavigationController.swift new file mode 100644 index 00000000..0ac49c04 --- /dev/null +++ b/Tusker/Screens/Preferences/PreferencesNavigationController.swift @@ -0,0 +1,35 @@ +// +// PreferencesHostingController.swift +// Tusker +// +// Created by Shadowfacts on 11/17/19. +// Copyright © 2019 Shadowfacts. All rights reserved. +// + +import UIKit +import SwiftUI + +class PreferencesNavigationController: UINavigationController { + + init() { + let hostingController = UIHostingController(rootView: PreferencesView()) + super.init(rootViewController: hostingController) + hostingController.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(donePressed)) + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func viewWillDisappear(_ animated: Bool) { + super.viewWillDisappear(animated) + + // workaround for onDisappear not being called when a modally presented UIHostingController is dismissed + NotificationCenter.default.post(name: .preferencesChanged, object: nil) + } + + @objc func donePressed() { + dismiss(animated: true) + } + +} diff --git a/Tusker/Screens/Profile/MyProfileTableViewController.swift b/Tusker/Screens/Profile/MyProfileTableViewController.swift index 4f284de8..7fdadc5c 100644 --- a/Tusker/Screens/Profile/MyProfileTableViewController.swift +++ b/Tusker/Screens/Profile/MyProfileTableViewController.swift @@ -51,11 +51,7 @@ class MyProfileTableViewController: ProfileTableViewController { } @objc func preferencesPressed() { - let view = PreferencesView().environmentObject(Preferences.shared) - let hostingController = UIHostingController(rootView: view) - let navigationController = UINavigationController(rootViewController: hostingController) - hostingController.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(closePreferences)) - present(navigationController, animated: true) + present(PreferencesNavigationController(), animated: true) } @objc func closePreferences() {