@@ -13,7 +13,7 @@ import Firebase
1313import GoogleMobileAds
1414
1515// taken from: https://developer.apple.com/documentation/uikit/view_controllers/building_a_document_browser-based_app
16- class DocumentViewController : UIViewController , DocumentDelegate , GADBannerViewDelegate {
16+ class DocumentViewController : UIViewController , DocumentDelegate , GADBannerViewDelegate , UISearchBarDelegate {
1717
1818 private var browserTransition : DocumentBrowserTransitioningDelegate ?
1919 public var transitionController : UIDocumentBrowserTransitionController ? {
@@ -33,6 +33,10 @@ class DocumentViewController: UIViewController, DocumentDelegate, GADBannerViewD
3333
3434 private var EXTENSION_WHITELIST = [ " pdf " , " doc " , " docx " , " xls " , " xlsx " , " ppt " , " pptx " , " rtf " , " rtfd.zip " , " csv " , " txt " , " jpg " , " jpeg " , " png " , " gif " , " svg " , " pages " , " pages.zip " , " numbers " , " numbers.zip " , " key " , " key.zip " , " mp3 " , " mp4 " , " flv " , " mkv " , " 3gp " , " aac " , " bmp " , " css " , " htm " , " html " , " js " , " json " , " mpeg " , " oga " , " ogv " , " sh " , " tif " , " tiff " , " weba " , " webm " , " webp " , " xhtml " , " xml " ]
3535
36+ @IBOutlet weak var toolBar : UIToolbar !
37+ @IBOutlet weak var searchBarTop : NSLayoutConstraint !
38+ @IBOutlet weak var searchBarHeight : NSLayoutConstraint !
39+ @IBOutlet weak var searchBar : UISearchBar !
3640 @IBOutlet weak var segmentedControl : ScrollableSegmentedControl !
3741 private var initialSelect = false
3842
@@ -55,6 +59,11 @@ class DocumentViewController: UIViewController, DocumentDelegate, GADBannerViewD
5559
5660 override func viewWillAppear( _ animated: Bool ) {
5761 super. viewWillAppear ( animated)
62+
63+ searchBar. delegate = self
64+ searchBar. showsCancelButton = true
65+
66+ hideSearchBar ( )
5867
5968 barButtonItem. title = NSLocalizedString ( " back_to_documents " , comment: " " )
6069
@@ -145,6 +154,62 @@ class DocumentViewController: UIViewController, DocumentDelegate, GADBannerViewD
145154 return isFullscreen
146155 }
147156
157+ func searchBarCancelButtonClicked( _ searchBar: UISearchBar ) {
158+ hideSearchBar ( )
159+ }
160+
161+ func searchBarResultsListButtonClicked( _ searchBar: UISearchBar ) {
162+ if let searchText = searchBar. text {
163+ findNext ( searchText: searchText)
164+ }
165+ }
166+
167+ func searchBar( _ searchBar: UISearchBar , textDidChange searchText: String ) {
168+ findAll ( searchText: searchText)
169+ }
170+
171+ @IBAction func searchButton( _ sender: UIBarButtonItem ) {
172+ showSearchBar ( )
173+ }
174+
175+ private func showSearchBar( ) {
176+ searchBar. becomeFirstResponder ( )
177+ searchBar. isHidden = false
178+ searchBarHeight. constant = 56.0
179+ searchBarTop. constant = 0.0
180+
181+ toolBar. isHidden = true
182+ }
183+
184+ private func hideSearchBar( ) {
185+ searchBar. text = " "
186+ searchBar. isHidden = true
187+ searchBarHeight. constant = 0.0
188+ searchBarTop. constant = 40.0
189+
190+ toolBar. isHidden = false
191+
192+ self . view. endEditing ( true )
193+ }
194+
195+ private func findNext( searchText: String ) {
196+ webview? . evaluateJavaScript ( " odr.searchNext( \" " + searchText + " \" ) " , completionHandler: { ( value: Any!, error: Error!) - > Void in
197+ if error != nil {
198+ Crashlytics . crashlytics ( ) . record ( error: error)
199+ fatalError ( " search failed " )
200+ }
201+ } )
202+ }
203+
204+ private func findAll( searchText: String ) {
205+ webview? . evaluateJavaScript ( " odr.search( \" " + searchText + " \" ) " , completionHandler: { ( value: Any!, error: Error!) - > Void in
206+ if error != nil {
207+ Crashlytics . crashlytics ( ) . record ( error: error)
208+ fatalError ( " search failed " )
209+ }
210+ } )
211+ }
212+
148213 @IBAction func returnToDocuments( _ sender: Any ) {
149214 guard let doc = document else {
150215 fatalError ( " document is null " )
0 commit comments