Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 38 additions & 13 deletions src/iOS/POI/POIFeaturePickerViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,14 @@ private var mostRecentArray: [PresetFeature] = []
private var mostRecentMaximum = 0

class POIFeaturePickerViewController: UITableViewController, UISearchBarDelegate {
/// Persists the type-picker search query while the POI editor stays open; cleared when that editor is dismissed.
private static var preservedFeatureTypeSearchText: String?

/// Called when the POI attribute editor modal is dismissed (save, cancel, swipe, etc.).
class func clearPreservedFeatureTypeSearchText() {
preservedFeatureTypeSearchText = nil
}

private var featureList: [PresetFeatureOrCategory] = []
private var searchArray: [PresetFeature] = []
@IBOutlet var searchBar: UISearchBar!
Expand Down Expand Up @@ -71,6 +79,34 @@ class POIFeaturePickerViewController: UITableViewController, UISearchBarDelegate
}
}

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
restorePreservedSearchIfNeeded()
}

/// Re-applies the in-memory search query and reloads the table (used when restoring state and from `UISearchBarDelegate`).
private func refreshSearchResults(for searchText: String) {
if searchText.isEmpty {
searchArray = []
} else {
let geometry = currentSelectionGeometry()
searchArray = PresetsDatabase.shared.featuresInCategory(
parentCategory,
matching: searchText,
geometry: geometry,
location: AppDelegate.shared.mainView.currentRegion)
}
tableView.reloadData()
}

private func restorePreservedSearchIfNeeded() {
guard let preserved = Self.preservedFeatureTypeSearchText else { return }
if searchBar.text != preserved {
searchBar.text = preserved
}
refreshSearchResults(for: preserved)
}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableView.automaticDimension
}
Expand Down Expand Up @@ -241,19 +277,8 @@ class POIFeaturePickerViewController: UITableViewController, UISearchBarDelegate
}

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText.count == 0 {
// no search
searchArray = []
} else {
// searching
let geometry = currentSelectionGeometry()
searchArray = PresetsDatabase.shared.featuresInCategory(
parentCategory,
matching: searchText,
geometry: geometry,
location: AppDelegate.shared.mainView.currentRegion)
}
tableView.reloadData()
Self.preservedFeatureTypeSearchText = searchText
refreshSearchResults(for: searchText)
}

@IBAction func configure(_ sender: Any) {
Expand Down
7 changes: 7 additions & 0 deletions src/iOS/POI/POITabBarController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,13 @@ class POITabBarController: UITabBarController {
}
}

override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if isBeingDismissed || isMovingFromParent {
POIFeaturePickerViewController.clearPreservedFeatureTypeSearchText()
}
}

override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)

Expand Down
Loading