@@ -12,9 +12,12 @@ class POIPresetValuePickerController: UITableViewController {
1212 var key = " "
1313 var presetValueList : [ PresetDisplayValue ] = [ ]
1414 var onSetValue : ( ( String ) -> Void ) ?
15+ var isMultiSelect = false
1516 var descriptions : [ String : String ] = [ : ]
1617 var images : [ String : UIImage ] = [ : ]
1718
19+ private var selectedValues : [ String ] = [ ]
20+
1821 let placeholderImage = UIImage ( ) . scaledTo ( width: ImageWidth, height: ImageWidth / 2 )
1922
2023 func fetchWikiImagesAndDescriptions( ) {
@@ -63,6 +66,40 @@ class POIPresetValuePickerController: UITableViewController {
6366
6467 tableView. estimatedRowHeight = UITableView . automaticDimension
6568 tableView. rowHeight = UITableView . automaticDimension
69+
70+ if let value = ( tabBarController as? POITabBarController ) ? . keyValueDict [ key] {
71+ if isMultiSelect {
72+ // semicolon-separated tag value
73+ selectedValues = value. split ( separator: " ; " )
74+ . map { $0. trimmingCharacters ( in: . whitespaces) }
75+ . filter { !$0. isEmpty }
76+ } else {
77+ selectedValues = [ value]
78+ }
79+ }
80+
81+ if isMultiSelect {
82+ navigationItem. leftBarButtonItem = UIBarButtonItem (
83+ barButtonSystemItem: . cancel,
84+ target: self ,
85+ action: #selector( cancelTapped) )
86+
87+ navigationItem. rightBarButtonItem = UIBarButtonItem (
88+ barButtonSystemItem: . done,
89+ target: self ,
90+ action: #selector( doneTapped) )
91+ }
92+ }
93+
94+ @objc private func cancelTapped( ) {
95+ navigationController? . popViewController ( animated: true )
96+ }
97+
98+ @objc private func doneTapped( ) {
99+ // Preserve display order rather than Set's arbitrary order.
100+ let values = selectedValues. joined ( separator: " ; " )
101+ onSetValue ? ( values)
102+ navigationController? . popViewController ( animated: true )
66103 }
67104
68105 // MARK: - Table view data source
@@ -103,16 +140,29 @@ class POIPresetValuePickerController: UITableViewController {
103140 cell. imageView? . image = image2
104141 }
105142
106- let tabController = tabBarController as? POITabBarController
107- let selected = tabController? . keyValueDict [ key] == preset. tagValue
108- cell. accessoryType = selected ? . checkmark : . none
143+ if isMultiSelect {
144+ cell. accessoryType = selectedValues. contains ( preset. tagValue) ? . checkmark : . none
145+ } else {
146+ let tabController = tabBarController as? POITabBarController
147+ let selected = tabController? . keyValueDict [ key] == preset. tagValue
148+ cell. accessoryType = selected ? . checkmark : . none
149+ }
109150
110151 return cell
111152 }
112153
113154 override func tableView( _ tableView: UITableView , didSelectRowAt indexPath: IndexPath ) {
114155 let preset = presetValueList [ indexPath. row]
115- onSetValue ? ( preset. tagValue)
116- navigationController? . popViewController ( animated: true )
156+ if isMultiSelect {
157+ if let i = selectedValues. firstIndex ( of: preset. tagValue) {
158+ selectedValues. remove ( at: i)
159+ } else {
160+ selectedValues. append ( preset. tagValue)
161+ }
162+ tableView. reloadRows ( at: [ indexPath] , with: . automatic)
163+ } else {
164+ onSetValue ? ( preset. tagValue)
165+ navigationController? . popViewController ( animated: true )
166+ }
117167 }
118168}
0 commit comments