From 401bef533cf9ee79b5e04f941beed1e744f5faa2 Mon Sep 17 00:00:00 2001 From: Chris Li Date: Sat, 1 Oct 2016 15:19:15 -0400 Subject: [PATCH] fix search bar placeholder --- .../Controller/Main/MainController.swift | 28 +-------------- .../Main/MainControllerShowHide.swift | 1 - Kiwix-iOS/Info.plist | 2 +- Kiwix-iOS/View/SearchBar.swift | 36 +++++++++++++++++++ Kiwix-iOSWidgets/Bookmarks/Info.plist | 2 +- 5 files changed, 39 insertions(+), 30 deletions(-) diff --git a/Kiwix-iOS/Controller/Main/MainController.swift b/Kiwix-iOS/Controller/Main/MainController.swift index e7e696a8..695ea56a 100644 --- a/Kiwix-iOS/Controller/Main/MainController.swift +++ b/Kiwix-iOS/Controller/Main/MainController.swift @@ -37,7 +37,7 @@ class MainController: UIViewController { newArticle?.addObserver(self, forKeyPath: "isBookmarked", options: .New, context: context) } didSet { - configureSearchBarPlaceHolder() + searchBar.articleTitle = article?.title configureBookmarkButton() configureUserActivity() } @@ -163,32 +163,6 @@ class MainController: UIViewController { bookmarkButton.customImageView?.highlighted = article?.isBookmarked ?? false } - func configureSearchBarPlaceHolder() { - func truncatedPlaceHolderString(string: String?, searchBar: UISearchBar) -> String? { - guard let string = string else {return nil} - guard let label = searchBar.valueForKey("_searchField") as? UITextField else {return nil} - guard let labelFont = label.font else {return nil} - let preferredSize = CGSizeMake(searchBar.frame.width - 45.0, 1000) - var rect = (string as NSString).boundingRectWithSize(preferredSize, options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: [NSFontAttributeName: labelFont], context: nil) - - var truncatedString = string as NSString - var istruncated = false - while rect.height > label.frame.height { - istruncated = true - truncatedString = truncatedString.substringToIndex(truncatedString.length - 2) - rect = truncatedString.boundingRectWithSize(preferredSize, options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: [NSFontAttributeName: labelFont], context: nil) - } - return truncatedString as String + (istruncated ? "..." : "") - } - - if let title = article?.title { - let placeHolder = truncatedPlaceHolderString(title, searchBar: searchBar) - searchBar.placeholder = placeHolder - } else { - searchBar.placeholder = LocalizedStrings.search - } - } - func configureTableOfContents() { guard traitCollection.horizontalSizeClass == .Regular && isShowingTableOfContents else {return} tableOfContentsController?.headings = JSInjection.getTableOfContents(webView) diff --git a/Kiwix-iOS/Controller/Main/MainControllerShowHide.swift b/Kiwix-iOS/Controller/Main/MainControllerShowHide.swift index 7e20c8b7..71bd7bfd 100644 --- a/Kiwix-iOS/Controller/Main/MainControllerShowHide.swift +++ b/Kiwix-iOS/Controller/Main/MainControllerShowHide.swift @@ -28,7 +28,6 @@ extension MainController { showSearchResultController(animated: animated) // SearchBar - searchBar.placeholder = LocalizedStrings.search if !searchBar.isFirstResponder() {searchBar.becomeFirstResponder()} // Show Cancel Button If Needed diff --git a/Kiwix-iOS/Info.plist b/Kiwix-iOS/Info.plist index 9aaf49b9..90e6d8f1 100644 --- a/Kiwix-iOS/Info.plist +++ b/Kiwix-iOS/Info.plist @@ -49,7 +49,7 @@ CFBundleVersion - 1.8.1553 + 1.8.1559 ITSAppUsesNonExemptEncryption LSRequiresIPhoneOS diff --git a/Kiwix-iOS/View/SearchBar.swift b/Kiwix-iOS/View/SearchBar.swift index c9fd55e5..615cdb5d 100644 --- a/Kiwix-iOS/View/SearchBar.swift +++ b/Kiwix-iOS/View/SearchBar.swift @@ -93,6 +93,11 @@ class CustomSearchBar: UISearchBar, UITextFieldDelegate { // Used in v1.4 class SearchBar: UISearchBar, UISearchBarDelegate { var searchTerm: String? + var articleTitle: String? { + didSet { + configurePlaceholder() + } + } private var textField: UITextField { return valueForKey("searchField") as! UITextField @@ -119,6 +124,7 @@ class SearchBar: UISearchBar, UISearchBarDelegate { func searchBarTextDidBeginEditing(searchBar: UISearchBar) { text = searchTerm + configurePlaceholder() 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 @@ -126,6 +132,10 @@ class SearchBar: UISearchBar, UISearchBarDelegate { }) } + func searchBarTextDidEndEditing(searchBar: UISearchBar) { + configurePlaceholder() + } + func searchBarCancelButtonClicked(searchBar: UISearchBar) { Controllers.shared.main.hideSearch(animated: true) } @@ -138,4 +148,30 @@ class SearchBar: UISearchBar, UISearchBarDelegate { func searchBarSearchButtonClicked(searchBar: UISearchBar) { Controllers.search.searchResultController?.selectFirstResultIfPossible() } + + // MARK: - Helper + + private func configurePlaceholder() { + if textField.editing { + placeholder = LocalizedStrings.search + } else { + placeholder = articleTitle ?? LocalizedStrings.search + } + } + + private func truncatedPlaceHolderString(string: String?, searchBar: UISearchBar) -> String? { + guard let string = string, + let labelFont = textField.font else {return nil} + let preferredSize = CGSizeMake(searchBar.frame.width - 45.0, 1000) + var rect = (string as NSString).boundingRectWithSize(preferredSize, options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: [NSFontAttributeName: labelFont], context: nil) + + var truncatedString = string as NSString + var istruncated = false + while rect.height > textField.frame.height { + istruncated = true + truncatedString = truncatedString.substringToIndex(truncatedString.length - 2) + rect = truncatedString.boundingRectWithSize(preferredSize, options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: [NSFontAttributeName: labelFont], context: nil) + } + return truncatedString as String + (istruncated ? "..." : "") + } } diff --git a/Kiwix-iOSWidgets/Bookmarks/Info.plist b/Kiwix-iOSWidgets/Bookmarks/Info.plist index 0399f103..4f40b39b 100644 --- a/Kiwix-iOSWidgets/Bookmarks/Info.plist +++ b/Kiwix-iOSWidgets/Bookmarks/Info.plist @@ -21,7 +21,7 @@ CFBundleSignature ???? CFBundleVersion - 1.8.1553 + 1.8.1559 NSExtension NSExtensionMainStoryboard