1

3d Touch を実装しようとしていますが、Master - Detail アプリで特定の viewController に移動したいと考えています。

私が目指しているviewControllerは、階層の3番目のコントローラーです。

MasterViewController ----> SettingsViewController ----> ThirdViewController

TabBarItem ( IB から直接 SettingsViewController にセグエ経由で接続) を介して通常の操作で ThirdViewController にアクセスし、次に UIButton ( IB から直接 ThirdViewController にセグエ経由で接続) を介して ThirdViewController にアクセスできます。

つまり、MasterViewController ---> (barButtonItem をタップ) ----> SettingsViewControler ----> (uiButton をタップ) ---> ThirdViewController です。

私はすでに info.plist を修正しており、3D touch は正常に動作し、アクションを呼び出すことができます:

 func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {

        var shortcutDictionary = shortcutItem.userInfo;
        let shortcutString1 = shortcutDictionary!["key1"] as! String

        if (shortcutString1 == "value1") {

      // how do i get from here to the settingsController??

        }

    }

編集:

すでに試しました:

let viewController = MasterViewController()    viewController.settingsButton.sendActionsForControlEvents(.TouchUpInside)

これにより、エラーが発生します。オプションの値をアンラップしようとすると致命的なエラーが発生します!

これはMasterViewControllerに存在しますが

 @IBOutlet weak var settingsButton: UIButton!
4

1 に答える 1

0

これは、ショートカットに使用するコードです....

func actionFromShortcut(sender: AnyObject!) {


        let dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(0.1 * Double(NSEC_PER_SEC)))
        dispatch_after(dispatchTime, dispatch_get_main_queue(), {


            self.performSegueWithIdentifier("shotcutToSettings", sender: nil)

//some other stuff here.....


        })

また、@MattLongのコメントに従って、セグエをコントローラーに複製しました(アニメーションのあるものとないもの)。そうすれば、アクションがショートカットから呼び出されたときに、ショートカット遷移が同時に行われるように見えます。

0.1 の遅延が発生します。コールド (アプリが実行されていない) からショートカットを呼び出そうとするたびに、MasterViewController に原因をロードする時間を与えるためです。要求した viewController になりますが、空の MasterViewController に戻るため、クラッシュします....

于 2015-12-03T23:03:39.263 に答える