Archived
1
Fork 0

Open a new window when clicking on a tag on macOS

This commit is contained in:
redstrate 2020-05-24 23:32:42 -04:00
parent 822eff1fe5
commit 50ec9aeb1b
6 changed files with 66 additions and 20 deletions

View file

@ -27,7 +27,7 @@
<!--Home-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="HomeViewController" customModule="Gallery" customModuleProvider="target" sceneMemberID="viewController">
<viewController storyboardIdentifier="HomeViewController" id="BYZ-38-t0r" customClass="HomeViewController" customModule="Gallery" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="800" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>

View file

@ -70,6 +70,32 @@ class EditTagsViewController: UIViewController, UITableViewDelegate, UITableView
newViewController.tag = (post?.tags![index!.row] as! Tag).name
}
}
override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
if identifier == "showTag" {
#if targetEnvironment(macCatalyst)
guard let cell = sender as? TagViewCell else {
return false
}
guard let name = cell.label.text else {
return false
}
let activity = NSUserActivity(activityType: "postsOf")
activity.userInfo = ["tags": name]
activity.isEligibleForHandoff = true
UIApplication.shared.requestSceneSessionActivation(nil, userActivity: activity, options: nil, errorHandler: nil)
return false
#else
return true
#endif
}
return super.shouldPerformSegue(withIdentifier: identifier, sender: sender)
}
}
extension EditTagsViewController {

View file

@ -8,7 +8,14 @@ class HomeViewController: UIViewController, UIDocumentPickerDelegate {
let documentsPath : URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].absoluteURL
let windowTitle = "Home"
var tags: String?
func updateWindowTitle() {
let windowTitle = tags ?? "All Posts"
self.view.window?.windowScene!.title = windowTitle
navigationItem.title = windowTitle
}
func importFile(path: URL) {
guard let appDelegate =
@ -54,13 +61,9 @@ class HomeViewController: UIViewController, UIDocumentPickerDelegate {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
collectionManager = PostsManager(collectionView: collectionView, tag: nil)
}
collectionManager = PostsManager(collectionView: collectionView, tag: tags)
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.view.window?.windowScene!.title = windowTitle
updateWindowTitle()
}
@IBAction func importAction(_ sender: Any) {
@ -113,3 +116,10 @@ class HomeViewController: UIViewController, UIDocumentPickerDelegate {
return super.shouldPerformSegue(withIdentifier: identifier, sender: sender)
}
}
extension HomeViewController {
static func loadFromStoryboard() -> HomeViewController? {
let storyboard = UIStoryboard(name: "Main", bundle: .main)
return storyboard.instantiateViewController(withIdentifier: "HomeViewController") as? HomeViewController
}
}

View file

@ -64,17 +64,7 @@ class PostDetailViewController: UIViewController, UIPopoverPresentationControlle
}
}
#if !targetEnvironment(macCatalyst)
updateWindowTitle()
#endif
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
#if targetEnvironment(macCatalyst)
updateWindowTitle()
#endif
}
@objc func closePopup() {

View file

@ -110,7 +110,7 @@ class PostsManager: NSObject, UICollectionViewDataSource, UICollectionViewDelega
managedContext = appDelegate.persistentContainer.viewContext
setTag(tag: nil)
setTag(tag: tag)
}
func reload(request: NSFetchRequest<NSManagedObject>) {

View file

@ -51,6 +51,14 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
return nil
}
func getTagsFromActivity(activity: NSUserActivity ) -> String? {
if let photoID = activity.userInfo?["tags"] as? String {
return photoID
}
return nil
}
func configure(window: UIWindow?, with activity: NSUserActivity) -> Bool {
if activity.activityType == "post" {
if let post = getPostFromActivity(activity: activity) {
@ -73,6 +81,18 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
if let navigationController = window?.rootViewController as? UINavigationController {
navigationController.pushViewController(editTagsController, animated: false)
return true
}
}
}
} else if activity.activityType == "postsOf" {
if let tags = getTagsFromActivity(activity: activity) {
if let homeController = HomeViewController.loadFromStoryboard() {
homeController.tags = tags
if let navigationController = window?.rootViewController as? UINavigationController {
navigationController.pushViewController(homeController, animated: false)
return true
}
}