preserve search text

This commit is contained in:
Chris Li 2016-09-28 17:33:42 -04:00
parent eff2d2203a
commit 8bede3734f
9 changed files with 77 additions and 68 deletions

View File

@ -1,5 +1,5 @@
//
// ControllerRetainer.swift
// Controllers.swift
// Kiwix
//
// Created by Chris Li on 8/31/16.
@ -8,10 +8,10 @@
import UIKit
class ControllerRetainer {
static let shared = ControllerRetainer()
class Controllers {
static let shared = Controllers()
private init() {
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ControllerRetainer.removeStrongReference), name: UIApplicationDidReceiveMemoryWarningNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(Controllers.removeStrongReference), name: UIApplicationDidReceiveMemoryWarningNotification, object: nil)
}
deinit {
@ -27,21 +27,27 @@ class ControllerRetainer {
welcome = nil
}
// MARK: - Main
var main: MainController {
return (UIApplication.appDelegate.window?.rootViewController as! UINavigationController).topViewController as! MainController
}
// MARK: - Bookmark
private var bookmark: UINavigationController?
class var bookmark: UINavigationController {
let controller = ControllerRetainer.shared.bookmark ?? UIStoryboard(name: "Bookmark", bundle: nil).instantiateInitialViewController() as! UINavigationController
ControllerRetainer.shared.bookmark = controller
let controller = Controllers.shared.bookmark ?? UIStoryboard(name: "Bookmark", bundle: nil).instantiateInitialViewController() as! UINavigationController
Controllers.shared.bookmark = controller
return controller
}
private var bookmarkStar: BookmarkHUD?
class var bookmarkStar: BookmarkHUD {
let controller = ControllerRetainer.shared.bookmarkStar ?? UIStoryboard(name: "Bookmark", bundle: nil).instantiateViewControllerWithIdentifier("BookmarkHUD") as! BookmarkHUD
ControllerRetainer.shared.bookmarkStar = controller
let controller = Controllers.shared.bookmarkStar ?? UIStoryboard(name: "Bookmark", bundle: nil).instantiateViewControllerWithIdentifier("BookmarkHUD") as! BookmarkHUD
Controllers.shared.bookmarkStar = controller
return controller
}
@ -50,8 +56,8 @@ class ControllerRetainer {
private var library: UIViewController?
class var library: UIViewController {
let controller = ControllerRetainer.shared.library ?? UIStoryboard(name: "Library", bundle: nil).instantiateInitialViewController()!
ControllerRetainer.shared.library = controller
let controller = Controllers.shared.library ?? UIStoryboard(name: "Library", bundle: nil).instantiateInitialViewController()!
Controllers.shared.library = controller
return controller
}
@ -60,8 +66,8 @@ class ControllerRetainer {
private var search: SearchController?
class var search: SearchController {
let controller = ControllerRetainer.shared.search ?? UIStoryboard(name: "Search", bundle: nil).instantiateInitialViewController() as! SearchController
ControllerRetainer.shared.search = controller
let controller = Controllers.shared.search ?? UIStoryboard(name: "Search", bundle: nil).instantiateInitialViewController() as! SearchController
Controllers.shared.search = controller
return controller
}
@ -70,8 +76,8 @@ class ControllerRetainer {
private var setting: UIViewController?
class var setting: UIViewController {
let controller = ControllerRetainer.shared.setting ?? UIStoryboard(name: "Setting", bundle: nil).instantiateInitialViewController()!
ControllerRetainer.shared.setting = controller
let controller = Controllers.shared.setting ?? UIStoryboard(name: "Setting", bundle: nil).instantiateInitialViewController()!
Controllers.shared.setting = controller
return controller
}
@ -80,8 +86,8 @@ class ControllerRetainer {
private var welcome: WelcomeController?
class var welcome: WelcomeController {
let controller = ControllerRetainer.shared.welcome ?? UIStoryboard(name: "Welcome", bundle: nil).instantiateInitialViewController() as! WelcomeController
ControllerRetainer.shared.welcome = controller
let controller = Controllers.shared.welcome ?? UIStoryboard(name: "Welcome", bundle: nil).instantiateInitialViewController() as! WelcomeController
Controllers.shared.welcome = controller
return controller
}

View File

@ -49,7 +49,6 @@ class MainController: UIViewController {
super.viewDidLoad()
webView.delegate = self
searchBar.delegate = self
ZimMultiReader.shared.delegate = self
navigationItem.titleView = searchBar
@ -241,13 +240,13 @@ class MainController: UIViewController {
}
func showLibraryButtonTapped() {
let controller = ControllerRetainer.library
let controller = Controllers.library
controller.modalPresentationStyle = .FullScreen
presentViewController(controller, animated: true, completion: nil)
}
func showSettingButtonTapped() {
let controller = ControllerRetainer.setting
let controller = Controllers.setting
controller.modalPresentationStyle = .FormSheet
presentViewController(controller, animated: true, completion: nil)
}

View File

@ -85,7 +85,7 @@ extension MainController: UIWebViewDelegate, SFSafariViewControllerDelegate, LPT
let operation = UpdateWidgetDataSourceOperation()
GlobalQueue.shared.addOperation(operation)
let controller = ControllerRetainer.bookmarkStar
let controller = Controllers.bookmarkStar
controller.bookmarkAdded = article.isBookmarked
controller.transitioningDelegate = self
controller.modalPresentationStyle = .OverFullScreen
@ -120,24 +120,7 @@ extension MainController: UIWebViewDelegate, SFSafariViewControllerDelegate, LPT
GlobalQueue.shared.add(load: operation)
}
// MARK: - UISearchBarDelegate
func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
showSearch(animated: true)
}
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
hideSearch(animated: true)
configureSearchBarPlaceHolder()
}
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
ControllerRetainer.search.startSearch(searchText, delayed: true)
}
func searchBarSearchButtonClicked(searchBar: UISearchBar) {
ControllerRetainer.search.searchResultController?.selectFirstResultIfPossible()
}
// MARK: - UIPopoverPresentationControllerDelegate

View File

@ -60,7 +60,7 @@ extension MainController {
}
private func showSearchResultController(animated animated: Bool) {
let controller = ControllerRetainer.search
let controller = Controllers.search
guard !childViewControllers.contains(controller) else {return}
addChildViewController(controller)
controller.view.translatesAutoresizingMaskIntoConstraints = false
@ -161,7 +161,7 @@ extension MainController {
// MARK: - Show Bookmark
func showBookmarkTBVC() {
let controller = ControllerRetainer.bookmark
let controller = Controllers.bookmark
controller.modalPresentationStyle = .FormSheet
presentViewController(controller, animated: true, completion: nil)
}
@ -169,7 +169,7 @@ extension MainController {
// MARK: - Show/Hide Welcome
func showWelcome() {
let controller = ControllerRetainer.welcome
let controller = Controllers.welcome
controller.view.translatesAutoresizingMaskIntoConstraints = false
addChildViewController(controller)
view.addSubview(controller.view)

View File

@ -16,11 +16,7 @@ class SearchController: UIViewController, UISearchBarDelegate, UIGestureRecogniz
@IBOutlet var tapGestureRecognizer: UITapGestureRecognizer!
var searchResultController: SearchResultController?
private var searchText = "" {
didSet {
configureViewVisibility()
}
}
private var searchTerm = "" // last searchTerm
override func viewDidLoad() {
super.viewDidLoad()
@ -30,14 +26,7 @@ class SearchController: UIViewController, UISearchBarDelegate, UIGestureRecogniz
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
configureViewVisibility()
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
guard searchText != "" else {return}
Preference.recentSearchTerms.insert(searchText, atIndex: 0)
searchText = ""
configureViewVisibility(searchTerm)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
@ -47,8 +36,8 @@ class SearchController: UIViewController, UISearchBarDelegate, UIGestureRecogniz
}
}
func configureViewVisibility() {
if searchText == "" {
func configureViewVisibility(searchTerm: String) {
if searchTerm == "" {
searchResultTBVCContainer.hidden = true
tabControllerContainer.hidden = false
} else {
@ -59,16 +48,17 @@ class SearchController: UIViewController, UISearchBarDelegate, UIGestureRecogniz
// MARK: - Search
func startSearch(searchText: String, delayed: Bool) {
self.searchText = searchText
func startSearch(searchTerm: String, delayed: Bool) {
guard self.searchTerm != searchTerm else {return}
self.searchTerm = searchTerm
configureViewVisibility(searchTerm)
if delayed {
let previousSearchText = searchText
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(275 * USEC_PER_SEC)), dispatch_get_main_queue()) {
guard previousSearchText == self.searchText else {return}
self.searchResultController?.startSearch(self.searchText)
guard searchTerm == self.searchTerm else {return}
self.searchResultController?.startSearch(self.searchTerm)
}
} else {
searchResultController?.startSearch(searchText)
searchResultController?.startSearch(searchTerm)
}
}

View File

@ -49,7 +49,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
<string>1.8.1343</string>
<string>1.8.1363</string>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>LSRequiresIPhoneOS</key>

View File

@ -7,7 +7,7 @@
//
import UIKit
// not used
class CustomSearchBar: UISearchBar, UITextFieldDelegate {
override init(frame: CGRect) {
@ -91,7 +91,13 @@ class CustomSearchBar: UISearchBar, UITextFieldDelegate {
// Used in v1.4
class SearchBar: UISearchBar {
class SearchBar: UISearchBar, UISearchBarDelegate {
var searchTerm: String?
private var textField: UITextField {
return valueForKey("searchField") as! UITextField
}
override init(frame: CGRect) {
super.init(frame: frame)
}
@ -106,5 +112,30 @@ class SearchBar: UISearchBar {
self.autocapitalizationType = .None
self.placeholder = LocalizedStrings.search
self.returnKeyType = .Go
self.delegate = self
}
}
// MARK: - UISearchBarDelegate
func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
text = searchTerm
Controllers.shared.main.showSearch(animated: true)
let dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(0.05 * Double(NSEC_PER_SEC)))
dispatch_after(dispatchTime, dispatch_get_main_queue(), { [unowned self] in
self.textField.selectAll(nil)
})
}
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
Controllers.shared.main.hideSearch(animated: true)
}
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
searchTerm = searchText
Controllers.search.startSearch(searchText, delayed: true)
}
func searchBarSearchButtonClicked(searchBar: UISearchBar) {
Controllers.search.searchResultController?.selectFirstResultIfPossible()
}
}

View File

@ -21,7 +21,7 @@
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.8.1347</string>
<string>1.8.1367</string>
<key>NSExtension</key>
<dict>
<key>NSExtensionMainStoryboard</key>

View File

@ -56,7 +56,7 @@
moduleName = "Kiwix"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Volumes/Data/Developer/Kiwix/Kiwix/Operations/BookmarkMigrationOperation.swift"
timestampString = "496789129.532637"
timestampString = "496791025.863771"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "27"
@ -71,7 +71,7 @@
moduleName = "Kiwix"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Volumes/Data/Developer/Kiwix/Kiwix/Operations/BookmarkMigrationOperation.swift"
timestampString = "496789129.534098"
timestampString = "496791025.865063"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "27"