NavigationList

This commit is contained in:
Chris Li 2016-11-21 14:57:04 -05:00
parent adbbc3350e
commit 3496d1e95d
7 changed files with 83 additions and 33 deletions

View File

@ -19,7 +19,7 @@ class MainController: UIViewController {
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
webView.loadRequest(URLRequest(url: URL(string: "about:blank")!)) // webView.loadRequest(URLRequest(url: URL(string: "about:blank")!))
navigationItem.titleView = searchBar navigationItem.titleView = searchBar
searchBar.delegate = self searchBar.delegate = self
buttons.delegate = self buttons.delegate = self
@ -56,3 +56,49 @@ class MainController: UIViewController {
} }
} }
} }
class WebView: UIWebView {
var backList = [URL]()
var forwardList = [URL]()
var currentURL: URL?
override var canGoBack: Bool {
return backList.count > 0
}
override var canGoForward: Bool {
return forwardList.count > 0
}
override func goBack() {
guard let lastURL = backList.last, let currentURL = currentURL else {return}
backList.removeLast()
self.currentURL = lastURL
forwardList.insert(currentURL, at: 0)
let request = URLRequest(url: lastURL)
loadRequest(request)
}
override func goForward() {
guard let nextURL = forwardList.first, let currentURL = currentURL else {return}
backList.append(currentURL)
self.currentURL = nextURL
forwardList.removeFirst()
let request = URLRequest(url: nextURL)
loadRequest(request)
}
override func loadRequest(_ request: URLRequest) {
super.loadRequest(request)
guard let currentURL = currentURL, let requestURL = request.url else {
self.currentURL = request.url
return
}
guard currentURL != requestURL else {return}
backList.append(currentURL)
self.currentURL = requestURL
forwardList.removeAll()
}
}

View File

@ -95,11 +95,11 @@ extension MainController: UIWebViewDelegate, SFSafariViewControllerDelegate {
present(controller, animated: true, completion: nil) present(controller, animated: true, completion: nil)
return false return false
} }
navigationList.webViewStartLoading(requestURL: url)
return true return true
} }
func webViewDidStartLoad(_ webView: UIWebView) { func webViewDidStartLoad(_ webView: UIWebView) {
} }
func webViewDidFinishLoad(_ webView: UIWebView) { func webViewDidFinishLoad(_ webView: UIWebView) {
@ -107,8 +107,8 @@ extension MainController: UIWebViewDelegate, SFSafariViewControllerDelegate {
guard let title = JS.getTitle(from: webView) else {return} guard let title = JS.getTitle(from: webView) else {return}
searchBar.title = title searchBar.title = title
buttons.back.tintColor = webView.canGoBack ? nil : UIColor.gray buttons.back.tintColor = navigationList.canGoBack ? nil : UIColor.gray
buttons.forward.tintColor = webView.canGoForward ? nil : UIColor.gray buttons.forward.tintColor = navigationList.canGoForward ? nil : UIColor.gray
} }
func webView(_ webView: UIWebView, didFailLoadWithError error: Error) { func webView(_ webView: UIWebView, didFailLoadWithError error: Error) {
@ -128,11 +128,11 @@ extension MainController {
extension MainController: ButtonDelegates, SearchContainerDelegate { extension MainController: ButtonDelegates, SearchContainerDelegate {
func didTapBackButton() { func didTapBackButton() {
webView.goBack() navigationList.goBack(webView: webView)
} }
func didTapForwardButton() { func didTapForwardButton() {
webView.goForward() navigationList.goForward(webView: webView)
} }
func didTapBookmarkButton() { func didTapBookmarkButton() {

View File

@ -13,24 +13,44 @@ class NavigationList {
var forwardList = [URL]() var forwardList = [URL]()
var currentURL: URL? var currentURL: URL?
func webViewFinishedLoading(url: URL) { func webViewStartLoading(requestURL: URL) {
guard url != currentURL else { return } guard let currentURL = currentURL else {
self.currentURL = requestURL
return
}
guard currentURL != requestURL else {return}
backList.append(currentURL)
self.currentURL = requestURL
forwardList.removeAll()
} }
func goBack() { func goBack(webView: UIWebView) {
guard let lastURL = backList.last, let currentURL = currentURL else {return}
backList.removeLast()
self.currentURL = lastURL
forwardList.insert(currentURL, at: 0)
let request = URLRequest(url: lastURL)
webView.loadRequest(request)
} }
func goForward() { func goForward(webView: UIWebView) {
guard let nextURL = forwardList.first, let currentURL = currentURL else {return}
backList.append(currentURL)
self.currentURL = nextURL
forwardList.removeFirst()
let request = URLRequest(url: nextURL)
webView.loadRequest(request)
} }
var canGoBack: Bool { var canGoBack: Bool {
return false return backList.count > 0
} }
var canGoForward: Bool { var canGoForward: Bool {
return false return forwardList.count > 0
} }
} }

View File

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

View File

@ -30,7 +30,7 @@
<rect key="frame" x="0.0" y="28" width="414" height="44"/> <rect key="frame" x="0.0" y="28" width="414" height="44"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="DSn-3Y-Gs4" id="vq5-6x-vLY"> <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="DSn-3Y-Gs4" id="vq5-6x-vLY">
<rect key="frame" x="0.0" y="0.0" width="414" height="43.666666666666664"/> <rect key="frame" x="0.0" y="0.0" width="414" height="43.5"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<subviews> <subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="xPq-dt-NK6"> <label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="xPq-dt-NK6">
@ -52,7 +52,7 @@
<rect key="frame" x="0.0" y="72" width="414" height="44"/> <rect key="frame" x="0.0" y="72" width="414" height="44"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="au4-iz-tLz" id="3UD-lZ-hs0"> <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="au4-iz-tLz" id="3UD-lZ-hs0">
<rect key="frame" x="0.0" y="0.0" width="414" height="43.666666666666664"/> <rect key="frame" x="0.0" y="0.0" width="414" height="43.5"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<subviews> <subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="DJX-Kf-59M"> <label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="DJX-Kf-59M">
@ -74,7 +74,7 @@
<rect key="frame" x="0.0" y="116" width="414" height="44"/> <rect key="frame" x="0.0" y="116" width="414" height="44"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="cam-ik-ZIw" id="ooG-35-3Wp"> <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="cam-ik-ZIw" id="ooG-35-3Wp">
<rect key="frame" x="0.0" y="0.0" width="414" height="43.666666666666664"/> <rect key="frame" x="0.0" y="0.0" width="414" height="43.5"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<subviews> <subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ry7-2s-QyS"> <label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ry7-2s-QyS">

View File

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

View File

@ -43,21 +43,5 @@
stopOnStyle = "0"> stopOnStyle = "0">
</BreakpointContent> </BreakpointContent>
</BreakpointProxy> </BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Kiwix/Operations/ArticleOperation.swift"
timestampString = "501088031.696211"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "61"
endingLineNumber = "61"
landmarkName = "execute()"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
</Breakpoints> </Breakpoints>
</Bucket> </Bucket>