2012-04-14 36 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

相关问题