mirror of
https://github.com/zhigang1992/GitHawk.git
synced 2026-06-12 08:48:19 +08:00
80 lines
2.5 KiB
Swift
80 lines
2.5 KiB
Swift
//
|
|
// BookmarkNavigationController.swift
|
|
// Freetime
|
|
//
|
|
// Created by Ryan Nystrom on 11/7/17.
|
|
// Copyright © 2017 Ryan Nystrom. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
// create and store on a VC when working w/ bookmarkable data
|
|
// must manually add to UINavigationItem
|
|
final class BookmarkNavigationController {
|
|
|
|
private let store: BookmarkStore
|
|
private let model: Bookmark
|
|
|
|
init?(store: BookmarkStore?, model: Bookmark?) {
|
|
guard let store = store, let model = model else { return nil }
|
|
self.store = store
|
|
self.model = model
|
|
}
|
|
|
|
// MARK: Public API
|
|
|
|
var navigationItem: UIBarButtonItem {
|
|
let item = UIBarButtonItem()
|
|
configureNavigationItem(item)
|
|
return item
|
|
}
|
|
|
|
func configureNavigationItem(_ item: UIBarButtonItem) {
|
|
|
|
let accessibilityLabel: String
|
|
let imageName: String
|
|
let selector: Selector
|
|
|
|
if store.contains(model) {
|
|
imageName = "nav-bookmark-selected"
|
|
accessibilityLabel = Constants.Strings.removeBookmark
|
|
selector = #selector(BookmarkNavigationController.remove(sender:))
|
|
} else {
|
|
imageName = "nav-bookmark"
|
|
accessibilityLabel = Constants.Strings.bookmark
|
|
selector = #selector(BookmarkNavigationController.add(sender:))
|
|
}
|
|
|
|
item.accessibilityLabel = accessibilityLabel
|
|
item.image = UIImage(named: imageName)?.withRenderingMode(.alwaysTemplate)
|
|
item.target = self
|
|
item.action = selector
|
|
item.isEnabled = true
|
|
item.width = 0
|
|
}
|
|
|
|
//for timeframe between viewDidLoad() and bookmark info is loaded
|
|
static var disabledNavigationItem: UIBarButtonItem {
|
|
let item = UIBarButtonItem()
|
|
item.image = UIImage(named: "nav-bookmark")?.withRenderingMode(.alwaysTemplate)
|
|
item.isEnabled = false
|
|
return item
|
|
}
|
|
|
|
// MARK: Private API
|
|
|
|
@objc func add(sender: UIBarButtonItem) {
|
|
Haptic.triggerSelection()
|
|
sender.action = #selector(BookmarkNavigationController.remove(sender:))
|
|
sender.image = UIImage(named: "nav-bookmark-selected")?.withRenderingMode(.alwaysTemplate)
|
|
store.add(model)
|
|
}
|
|
|
|
@objc func remove(sender: UIBarButtonItem) {
|
|
sender.action = #selector(BookmarkNavigationController.add(sender:))
|
|
sender.image = UIImage(named: "nav-bookmark")?.withRenderingMode(.alwaysTemplate)
|
|
store.remove(model)
|
|
}
|
|
|
|
}
|