2012-04-14 72 views
2

我的應用程序是用故事板 我想張貼在這裏的層次:顯示從的appDelegate基於自定義URL架構視圖控制器

視圖控制器>標籤欄控制器>導航控制器> TableViewController> DetailViewController

這細節視圖控制器也有我通過接口生成器設置的標識符。

選擇表格上的項目將顯示詳細視圖。

我在我的應用程序啓用了自定義網址,一切工作正常,除了通過使用myappname接收來自其他應用程序的調用:// UNIQUEID

我想,當我收到一個以顯示詳細信息視圖我談到更早自定義URL調用,但我不知道如何。

我已經實例化視圖控制器使用它的標識符,但我不知道如何顯示它沒有拋出一個錯誤。

請幫助如何從appdelegate openUrl:source應用程序方法直接顯示此故事板中的視圖。

回答

1

到這個問題的辦法是讓從AppDelagate所有視圖控制器通知,當正確的視圖控制器接收這個通知來自AppDelegate自定義的URL委託,該視圖可以被模態加載。

0

你會想讓你的用戶界面進入一個已知的就緒狀態,因爲當你打電話時不知道它會在哪裏。爲了做好準備,你需要有一個標籤欄的句柄,能夠將URL中的唯一標識轉換爲細節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; 

您是否正在使用故事板segue從splash vc中獲取主應用程序?我會猜測是的。從splash view controller到主應用有多個segue嗎?我會猜測沒有。如果這些猜測是錯誤的,你需要調整這個代碼...

// 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 2012-04-14 17:12:31

+0

就緒狀態表示準備推送詳細視圖控制器(請參閱代碼)。最後一行顯示如何推送視圖控制器。 – danh 2012-04-14 18:49:13

+0

我試過了,不適合我。我爲self.tabBarController拋出一個錯誤。我已經使用iOS5的故事板做了整件事情。請使用解決方案編輯您的答案。我認爲我們必須從故事板instanstiateViewController並以某種方式將其推到屏幕上。但是appdelegate與這個視圖控制器沒有任何關係。 – carbonr 2012-04-15 10:44:16

相關問題