2012-04-14 8 views
2

表示私のアプリは、私がここに階層を投稿したい ストーリーボードを使用している:カスタムURLスキーマに基づいてappDelegateからのビューコントローラ

ビューコントローラ>タブバーコントローラ>ナビゲーションコントローラ> TableViewController> DetailViewController

この詳細ビューコントローラは、インターフェースビルダーを介して設定された識別子iも有する。

表の項目を選択すると、詳細ビ​​ューが表示されます。

私は私のアプリでカスタムURLを有効にしているし、すべてがを除いて正常に動作し、もしmyAppNameを使って、他のアプリからの呼び出しを受けた://一意ID

私が受け取るとき、私は以前について話した詳細ビューを表示したいですカスタムURLの呼び出しがどのようにわからない。

識別子を使用してビューコントローラをインスタンス化しましたが、エラーをスローせずに表示する方法がわかりません。

このストーリーボードのビューをappdelegate openUrl:sourceアプリケーションメソッドから直接表示する方法をお手伝いしてください。

答えて

1

この問題を解決するには、すべてのビューコントローラにAppDelagateからの通知を持っていたし、正しいビューコントローラは、受信したときこの通知AppDelegateカスタムURLデリゲートから、ビューはモーダルに読み込むことができます。

0

あなたは知られている準備状態のUIを取得したいと思うでしょう。なぜなら、呼び出しが来たときのどこが来るかを知らないからです。準備が整うためには、タブバーのハンドルが必要です。 URL上のuniqueidを、詳細VCが検査するはずのモデル部分に変換することができます。

それは(既存のコードについて推測リベラルで)次のようになります。

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 

    // get the ui to a known state 
    self.tabBarController.selectedIndex = kTHE_NAVIGATION_VC_INDEX; 
    UINavigationController *nav = (UINavigationController *)self.tabBarController.selectedViewController; 
    [nav popToRootViewControllerAnimated:NO]; 

    // parse the url to get uniqueId 
    // the uniqueId specifies an object in your model that you want to have 
    // inspected by the detail view controller? you'll need that object... 
    MyObject *detailObject = [self.myModel objectWithUniqueId:uniqueId]; 

    // the detail vc probably has an init like this? 
    DetailVC *detailVC = [[DetailVC alloc] initWithModel:detailObject]; 

    [nav pushViewController:detailVC animated:YES]; 
} 

編集

それはtabBarControllerだ、あなたはプロパティを設定することができますへのアプリの代理人アクセスを与えるにはこのように:

// AppDelegate.h 
@property (strong, nonatomic) UITabBarController *tabBarController; 

// AppDelegate.m, after @implementation 
@synthesize tabBarController=_tabBarController; 

スプラッシュVCからメインアプリケーションへのストーリーボードセグを使用していますか?私はYESを推測するつもりです。スプラッシュビューコントローラからメインアプリケーションへの複数のセグがありますか?私はNOを推測するつもりです。これらの推測のどちらかが間違っている場合、あなたはこのコードを調整する必要があります...

// SplashViewController.m 

#import "AppDelegate.h" 

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    UITabBarController *tabBarController = (UITabBarController *)[segue destinationViewController]; 
    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
    appDelegate.tabBarController = tabBarController; 
} 
+0

UIを準備完了状態にするとどういう意味ですか?私はURLの引数を解析して、詳細なビューを取得して正しいオブジェクトを表示していますが、ビューをプッシュする方法は分かりませんでした。 – carbonr

+0

準備完了状態とは、詳細ビューコントローラをプッシュする準備ができていることを意味します(コードを参照)。最後の行は、View Controllerをプッシュする方法を示しています。 – danh

+0

私はそれを試して、私のために動作しません。私はself.tabBarControllerのエラーをスローします。私はiOS5のストーリーボードを使ってすべてを作った。解決策を解答して編集してください。私はストーリーボードからInstanstiateViewControllerを持っていなければならず、何とかそれを画面にプッシュする必要があると思います。しかし、appdelegateはこのView Controllerに接続していません。 – carbonr

関連する問題