go непосредственно на другую страницу, используя быстрый ярлык Action в swift - PullRequest
0 голосов
/ 09 марта 2020

мое приложение имеет 2 страницы (VC), которые создаются и управляются в BossPageViewController, и я хочу дать пользователю возможность перейти непосредственно на вторую страницу с помощью действия «Ярлык». теперь я знаю, как создавать ярлыки и как их запускать, и я также знаю, как открыть эту страницу как root, но когда я открываю ее как root, я больше не могу пролистать до первой страницы, а также до страницы. Точек там нет поэтому я должен закрыть приложение и запустить его снова, чтобы иметь возможность пролистывать между страницами и видеть pageDots.

код ниже - это место, где срабатывает ярлык второй страницы, я скопировал и пропустил весь sceneDelegate здесь, возможно, кто-то захочет проверьте это:

import UIKit
class SceneDelegate: UIResponder, UIWindowSceneDelegate {

var window: UIWindow?
var shortcutItemManager: UIApplicationShortcutItem?

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

    if let shortcutItem = connectionOptions.shortcutItem {
        shortcutItemManager = shortcutItem
    }
    guard let _ = (scene as? UIWindowScene) else { return }
}

func windowScene(_ windowScene: UIWindowScene, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
    shortcutItemManager = shortcutItem
}

//MARK:- Shortcuts are Triggered here.

func sceneDidBecomeActive(_ scene: UIScene) {
    if let shortcutItem = shortcutItemManager {

        if shortcutItem.type == "com.x.appname.openSecondPage" {



            ///- tag: code lines that run secondPage as root VC

            if let windowScene = scene as? UIWindowScene {
               let window = UIWindow(windowScene: windowScene)
             let storyboard = UIStoryboard(name: "Main", bundle: nil)
               window.rootViewController = storyboard.instantiateViewController(withIdentifier: "SecondPageVC")
               self.window = window
               window.makeKeyAndVisible()



            }
            shortcutItemManager = nil
         }

        }  
      }
   }

Я также не хочу создавать экземпляр страницы как popover или модальный или что-то еще, я имею в виду просто хочу, чтобы эта страница была как есть, а не копия этой страницы. Пример кода того, что я имею в виду под копией:

            let openSecondPage = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(identifier: "SecondPageVC") as! SecondPageViewController
            window?.rootViewController?.present(openSecondPage, animated: false, completion: nil)

Я искал в течение месяца, но ничего подобного не было, они были похожи, но их кодовое решение не для меня, поэтому Я опубликовал это.

1 Ответ

0 голосов
/ 14 марта 2020

Swift 5.1

Хорошо, смешав и выполняя пробные версии и ошибки на разных кодах, размещенных в Stackoverflow для разных вопросов, наконец-то я сделал эту работу для себя, как хотел, и подумал, что лучше поделиться ей, потому что я знаю кому-то это понадобится или, возможно, у вас есть лучший подход к этому, которым можно поделиться с нами.

Используйте приведенный ниже код для запуска ярлыка Item или если вы хотите запустить его при запуске приложения, используйте его внутри ***** fun c scene (_ scene: UIScene, willConnectTo session: UISceneSession, параметры connectionOptions: UIScene.ConnectionOptions) ***** в sceneDelegate.

if let windowScene = scene as? UIWindowScene {


                let window = UIWindow(windowScene: windowScene)
                let bossPageVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(identifier: "BossPageVCID") as! BossPageViewController

                self.window = window

                UIView.transition(with: window, duration: 0.1, options: .transitionCrossDissolve, animations: {

                    window.rootViewController = bossPageVC
                    window.makeKeyAndVisible()

                }, completion: { completed in
                    // viewControllerPages is a viewController array I created in BossPageViewController and index of 1 means the second page
                    if let secondPage = bossPageVC.viewControllerPages[1]
                        bossPageVC.setViewControllers([secondPage], direction: .forward, animated: true, completion: nil)

                })
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...