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() {
super.viewDidLoad()
webView.loadRequest(URLRequest(url: URL(string: "about:blank")!))
// webView.loadRequest(URLRequest(url: URL(string: "about:blank")!))
navigationItem.titleView = searchBar
searchBar.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)
return false
}
navigationList.webViewStartLoading(requestURL: url)
return true
}
func webViewDidStartLoad(_ webView: UIWebView) {
}
func webViewDidFinishLoad(_ webView: UIWebView) {
@ -107,8 +107,8 @@ extension MainController: UIWebViewDelegate, SFSafariViewControllerDelegate {
guard let title = JS.getTitle(from: webView) else {return}
searchBar.title = title
buttons.back.tintColor = webView.canGoBack ? nil : UIColor.gray
buttons.forward.tintColor = webView.canGoForward ? nil : UIColor.gray
buttons.back.tintColor = navigationList.canGoBack ? nil : UIColor.gray
buttons.forward.tintColor = navigationList.canGoForward ? nil : UIColor.gray
}
func webView(_ webView: UIWebView, didFailLoadWithError error: Error) {
@ -128,11 +128,11 @@ extension MainController {
extension MainController: ButtonDelegates, SearchContainerDelegate {
func didTapBackButton() {
webView.goBack()
navigationList.goBack(webView: webView)
}
func didTapForwardButton() {
webView.goForward()
navigationList.goForward(webView: webView)
}
func didTapBookmarkButton() {

View File

@ -13,24 +13,44 @@ class NavigationList {
var forwardList = [URL]()
var currentURL: URL?
func webViewFinishedLoading(url: URL) {
guard url != currentURL else { return }
func webViewStartLoading(requestURL: URL) {
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 {
return false
return backList.count > 0
}
var canGoForward: Bool {
return false
return forwardList.count > 0
}
}

View File

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

View File

@ -30,7 +30,7 @@
<rect key="frame" x="0.0" y="28" width="414" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<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"/>
<subviews>
<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"/>
<autoresizingMask key="autoresizingMask"/>
<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"/>
<subviews>
<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"/>
<autoresizingMask key="autoresizingMask"/>
<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"/>
<subviews>
<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>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.8.3001</string>
<string>1.8.3037</string>
<key>NSExtension</key>
<dict>
<key>NSExtensionMainStoryboard</key>

View File

@ -43,21 +43,5 @@
stopOnStyle = "0">
</BreakpointContent>
</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>
</Bucket>