3D触摸选项卡视图的快捷方式,然后执行segue

时间:2016-02-09 00:52:06

标签: ios iphone swift 3dtouch

我在使用应用程序中的3D触摸快捷方式时遇到问题。我的应用程序使用选项卡,但我想将用户重定向到选项卡,然后当他们按下创建愿望清单按钮时,也将其重定向到另一个segue。

Here is a picture of my storyboard.

我目前使用的代码显示了主视图控制器,但我希望它进入创建愿望清单控制器。

我在app delegate中使用句柄快捷键的代码在这里:

   func handleShortcut( shortcutItem:UIApplicationShortcutItem ) -> Bool {
            print("Handling shortcut")

            var succeeded = false

            if( shortcutItem.type == "com.example.Giftr" ) {

                print("- Handling \(shortcutItem.type)")

                if let tabVC = self.window?.rootViewController as? UITabBarController{
                tabVC.selectedIndex = 1 
                //This is where I need to swap to the "createwishlist" view controller. 
}

3 个答案:

答案 0 :(得分:0)

在成功切换标签后,应该可以将ViewController更改为所需的类。

import java.util.Scanner;

public class LeapYear {

    public static void main(String[] args){

        Scanner scan = new Scanner(System.in);

        System.out.println("Please enter a year on the Gregorian calendar. (After 1583)");


        int yearEntered = scan.nextInt();

        if (yearEntered < 1583){

            System.out.println("Please enter an integer greater than 1582");
            System.out.println("Try again");

        }else{

                int yearEntered = scan.nextInt();
//this is where I'm messing up

答案 1 :(得分:0)

为了解决这个问题,我使用了一个全局变量来存储已经在appDelegate中获取的快捷方式,如下所示。

'\0'

然后在selectedIndex 0选项卡的控制器内检查该值是否为1,然后它是否被调到我想要结束的视图控制器。如图所示。

          GlobalVars.shortcut = 1
            let tabVC = window?.rootViewController as! UITabBarController
            print(tabVC.self)
            tabVC.selectedIndex = 0

确保将全局变量设置为0,否则每次出现视图时都会调用此变量。

答案 2 :(得分:0)

我将使用NotificationCenter。假设您的应用程序自然启动到HomeViewController,它恰好是主选项卡栏控制器的第一个VC,并且您想定义“ New Post”快捷方式项,以便在加载HomeViewController后立即对NewPostViewController执行segue。

首先,定义通知名称:

extension Notification.Name {

    Notification.Name("applicationLaunchedWithNewPostShortcutItem")

}

第二,使用快捷方式项启动应用程序时发布通知(我假设它是第一个静态快捷方式项):

func handleShortCutItem(_ shortcutItem: UIApplicationShortcutItem) -> Bool {
    var handled = false

    guard ShortcutIdentifier(fullType: shortcutItem.type) != nil else { return false } 
    guard let shortCutType = shortcutItem.type as String? else { return false }

    switch shortCutType {
    case ShortcutIdentifier.first.type:
        NotificationCenter.default.post(name: .applicationLaunchedWithNewPostShortcutItem, object: nil, userInfo: nil)
        handled = true
        break
    default:
        break
    }

    return handled
}

对于不熟悉上述方法的人,通常在AppDelegate.swift中定义它,并在AppDelegate.swift中的application(_:performActionFor:completionHandler :)中调用它。请参阅Apple的示例代码here

最后,允许HomeViewController通过在其中实现addObservers()和removeObservers()方法来调整到通知。

class HomeViewController {

    // MARK: - View Controller Life Cycle

    override func viewDidLoad() { // or viewWillAppear(), etc.
        super.viewDidLoad()
        NotificationCenter.default.addObserver(forName: .applicationLaunchedWithNewPostShortcutItem, object: nil, queue: .main) { [weak self] (notification) in
            self?.handleApplicationLaunchedWithNewPostShortcutItem(notification: notification)
        }
    }

    deinit { // or viewWillDisappear(), etc.
        removeObservers()
    }

    // MARK: - Notification Center Handlers

    private func handleApplicationLaunchedWithNewPostShortcutItem(notification: Notification) {
        performSegue(withIdentifier: "presentNewPost", sender: nil)
    }