Open a new window when clicking on a tag on macOS
This commit is contained in:
parent
822eff1fe5
commit
50ec9aeb1b
6 changed files with 66 additions and 20 deletions
|
@ -27,7 +27,7 @@
|
||||||
<!--Home-->
|
<!--Home-->
|
||||||
<scene sceneID="tne-QT-ifu">
|
<scene sceneID="tne-QT-ifu">
|
||||||
<objects>
|
<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">
|
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="800" height="600"/>
|
<rect key="frame" x="0.0" y="0.0" width="800" height="600"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
|
|
@ -70,6 +70,32 @@ class EditTagsViewController: UIViewController, UITableViewDelegate, UITableView
|
||||||
newViewController.tag = (post?.tags![index!.row] as! Tag).name
|
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 {
|
extension EditTagsViewController {
|
||||||
|
|
|
@ -8,7 +8,14 @@ class HomeViewController: UIViewController, UIDocumentPickerDelegate {
|
||||||
|
|
||||||
let documentsPath : URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].absoluteURL
|
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) {
|
func importFile(path: URL) {
|
||||||
guard let appDelegate =
|
guard let appDelegate =
|
||||||
|
@ -54,13 +61,9 @@ class HomeViewController: UIViewController, UIDocumentPickerDelegate {
|
||||||
override func viewWillAppear(_ animated: Bool) {
|
override func viewWillAppear(_ animated: Bool) {
|
||||||
super.viewWillAppear(animated)
|
super.viewWillAppear(animated)
|
||||||
|
|
||||||
collectionManager = PostsManager(collectionView: collectionView, tag: nil)
|
collectionManager = PostsManager(collectionView: collectionView, tag: tags)
|
||||||
}
|
|
||||||
|
|
||||||
override func viewDidAppear(_ animated: Bool) {
|
updateWindowTitle()
|
||||||
super.viewDidAppear(animated)
|
|
||||||
|
|
||||||
self.view.window?.windowScene!.title = windowTitle
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func importAction(_ sender: Any) {
|
@IBAction func importAction(_ sender: Any) {
|
||||||
|
@ -113,3 +116,10 @@ class HomeViewController: UIViewController, UIDocumentPickerDelegate {
|
||||||
return super.shouldPerformSegue(withIdentifier: identifier, sender: sender)
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -64,17 +64,7 @@ class PostDetailViewController: UIViewController, UIPopoverPresentationControlle
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !targetEnvironment(macCatalyst)
|
|
||||||
updateWindowTitle()
|
updateWindowTitle()
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
override func viewDidAppear(_ animated: Bool) {
|
|
||||||
super.viewDidAppear(animated)
|
|
||||||
|
|
||||||
#if targetEnvironment(macCatalyst)
|
|
||||||
updateWindowTitle()
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc func closePopup() {
|
@objc func closePopup() {
|
||||||
|
|
|
@ -110,7 +110,7 @@ class PostsManager: NSObject, UICollectionViewDataSource, UICollectionViewDelega
|
||||||
|
|
||||||
managedContext = appDelegate.persistentContainer.viewContext
|
managedContext = appDelegate.persistentContainer.viewContext
|
||||||
|
|
||||||
setTag(tag: nil)
|
setTag(tag: tag)
|
||||||
}
|
}
|
||||||
|
|
||||||
func reload(request: NSFetchRequest<NSManagedObject>) {
|
func reload(request: NSFetchRequest<NSManagedObject>) {
|
||||||
|
|
|
@ -51,6 +51,14 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
||||||
return nil
|
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 {
|
func configure(window: UIWindow?, with activity: NSUserActivity) -> Bool {
|
||||||
if activity.activityType == "post" {
|
if activity.activityType == "post" {
|
||||||
if let post = getPostFromActivity(activity: activity) {
|
if let post = getPostFromActivity(activity: activity) {
|
||||||
|
@ -73,6 +81,18 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
||||||
if let navigationController = window?.rootViewController as? UINavigationController {
|
if let navigationController = window?.rootViewController as? UINavigationController {
|
||||||
navigationController.pushViewController(editTagsController, animated: false)
|
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
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue