我的应用正在使用Storyboards 我想在这里发布层次结构:
查看控制器&gt;标签栏控制器&gt; <导航控制器> TableViewController&gt; DetailViewController
此详细视图控制器还具有通过接口构建器设置的标识符。
选择表格上的项目显示详细视图。
我已在我的应用中启用了自定义网址,但一切正常,但接收来自其他应用的呼叫使用myappname:// uniqueid
我希望在收到自定义网址电话时显示我之前谈到的详情视图,但我不知道如何。
我已使用其标识符实例化视图控制器,但我不知道如何在不抛出错误的情况下显示它。
请直接从appdelegate openUrl:源应用程序方法帮助您了解如何在此故事板中显示视图。
答案 0 :(得分:1)
此问题的解决方案是从AppDelagate向所有视图控制器发出通知,并且当正确的视图Controller从AppDelegate自定义URL委托接收此通知时,可以以模态方式加载视图。
答案 1 :(得分:0)
你会想要让你的用户界面处于一个已知的准备状态,因为在呼叫进入时无法确定它的位置。要做好准备,你需要有一个标签栏的句柄,并且能够将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];
}
修改强>
要让您的app app委托访问它的tabBarController,您可以设置如下属性:
// AppDelegate.h
@property (strong, nonatomic) UITabBarController *tabBarController;
// AppDelegate.m, after @implementation
@synthesize tabBarController=_tabBarController;
您是否正在使用storyboard segue从启动vc到主应用程序?我猜是的。从启动视图控制器到主应用程序是否有多个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;
}