2015-09-28 8 views
10

3Dタッチを使用してホーム画面ショートカットを実装していますが、うまく機能していますが、現在のところ、ショートカットが特定のビューコントローラ、バーとナビゲーションバーが表示されません。ビューコントローラを表示するときにナビゲーションとタブバーが表示されない

これは私のコードです:

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

    if let shortcutType = ShortcutType.init(rawValue: shortcutItem.type) { 
     let rootViewController = window!.rootViewController 

     switch shortcutType { 
     case .Favourites: 
      let storyboard = UIStoryboard(name: "Main", bundle: nil) 
      let rootController = storyboard.instantiateViewControllerWithIdentifier("favourites") as! FavouritesTableViewController 
      rootController.parkPassed = DataManager.sharedInstance.getParkByName(NSUserDefaults.standardUserDefaults().stringForKey("currentPark")!) 
      self.window?.rootViewController = rootController 
      self.window?.makeKeyAndVisible() 

      handled = true 
     } 
    return handled 
} 

誰もが、私は、コードに変更するために必要なものをお勧めすることはできますか?

これは右舷レイアウト(FavouritesTableViewControllerが示されている)である。

enter image description here

EDIT:

@available(iOS 9.0, *) 
func handleShortCutItem(shortcutItem: UIApplicationShortcutItem) -> Bool { 
    var handled = false 

    if let shortcutType = ShortcutType.init(rawValue: shortcutItem.type) { 
     switch shortcutType { 
     case .Favourites: 
      print("favourites") 
      let storyboard = UIStoryboard(name: "Main", bundle: nil) 
      let rootController = storyboard.instantiateViewControllerWithIdentifier("favourites") as! FavouritesViewController 
      rootController.parkPassed = DataManager.sharedInstance.getParkByName(NSUserDefaults.standardUserDefaults().stringForKey("currentPark")!) 

      let root = UIApplication.sharedApplication().delegate as! AppDelegate 
      if let navCont = root.window?.rootViewController?.navigationController { 
       navCont.presentViewController(rootController, animated: true, completion: nil) 
      } else { 
       root.window?.rootViewController?.presentViewController(rootController, animated: true, completion: nil) 
      } 

      root.window?.makeKeyAndVisible() 

      handled = true 
     } 
    } 
    return handled 
} 
+1

彼らが不足している場合、あなたはあなたが今doinのしているものであるウィンドウのルートビューからそれを提示しています。あなたは、あなたのtabbバーをrootviewとして作ってから、あなたのタブバーの中に入れなければなりません。 –

+0

どうすればいいですか?私はストーリーボードのレイアウトで質問を更新しました。 – user3746428

答えて

2

これを試してみてください:

ここ

は私の更新されたコードですデリゲートをアプリケーションデリゲートから取得する:0

Controller *cont=//get the reference from storyboard either using storyboard ID 

してからrootviewは、他のコントローラ提示します:

[appDelegate.window.rootViewController presentViewController:cont animated:YES completion:^{ 
          DLog(@"presented your view ON TOP of the tab bar controller"); 
         }]; 

スウィフト:

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
あなたはストーリーボードから提示したいコントローラを取得します
var appDelegate: AppDelegate = UIApplication.sharedApplication().delegate() 
    var cont: Controller = //get the reference form storyboard 
    appDelegate.window.rootViewController.presentViewController(cont, animated: true, completion: { DLog("presented your view ON TOP of the tab bar controller") 

}) 

あなたが好きな場合は、メインスレッド上のプレゼンテーションのものを移動することができます!

+0

もう一度、あなたのタブバーはルートビューコントローラでなければならないことに注意してください –

+0

これはまだ私のためのtaborのないプレゼンテーションの結果となります。私のビューの階層は以下の通りです:ルート:Tabbar Controller - > Nav controller - > destinationView。 – Jerland2

0

問題は、ビューコントローラ(命名:rootController)を設定している、あるwindow?.rootViewControllerによってrootControllerを提示する以外に、window?.rootViewControllerします。あなたはこのようにそれを使用する場合だけ

self.window?.rootViewController.presentViewController(rootController, animated: true, completion: nil) 
+0

ああ、それは理にかなっています。しかし、それは私にこれを与えています: '警告:ウインドウ階層に表示されていないを提示しようとしました! ' – user3746428

0

self.window?.rootViewController = rootController 

を変更するには、このViewControllerをにrootviewを置き換えられます。だから、これは新しいソロページになり、navControllerまたはtabbarControllerを持たない普通のページになります。ビュー階層内にこの新しいページのみがあるためです。 あなたはrootviewからこれを提示したい場合は、だから私は、私はそれがあなたのために働くことを願っています解決策を得た

let root=UIApplication.sharedApplication().delegate as! AppDelegate 
    if let navCont=root.window?.rootViewController?.navigationController 
    { 
     navCont.presentViewController(viewControllerToPresent: UIViewController, animated: true, completion: nil) 
    } 
    else{ 
     root.window?.rootViewController?.presentViewController(viewControllerToPresent: UIViewController, animated: true, completion: nil) 
    } 
+0

これは私が投稿したコメント下に... – user3746428

+0

ああ! root.window?.makeKeyAndVisible()も使用してください。私はこの古いプロジェクトを使っていました。それは働いていた – kocakmstf

+0

それはまだ私に警告を与えている。私はあなたがそれをチェックアウトできるように私の更新されたコードを掲載しました。 – user3746428

1

をしようとします。

まず、ストーリーボードインスタンスを設定する必要があります。

let storyboard = UIStoryboard(name: "Main", bundle: nil) 

その後、ナビゲーションを開始する場所を設定する必要があります。

let mynVC = storyboard.instantiateViewControllerWithIdentifier("root") as! UINavigationController 

今、あなたはそう

let playVC = storyboard.instantiateViewControllerWithIdentifier("playVC") 

を表示したいのViewControllerを設定することができますし、今はワークフローを開始するが、あなたはこの

のように完成にこれをしなければならないことに注意することができます
self.window?.rootViewController?.presentViewController(rootVC, animated: true, completion: {() -> Void in 
      rootVC.pushViewController(playVC, animated: true) 
     }) 

あなたのrootViewControllerがあなたに "rootVC"とあなたのplayVCを提示します。

私はそれはあなたたちを助けることを願っています:)

+0

これはまだ私のためのtaborなしのプレゼンテーションになります....任意のアイデアなぜですか?私のビューの階層は以下の通りです:ルート:Tabbar Controller - > Nav controller - > destinationView。 – Jerland2

関連する問題