2013-05-11 122 views
0

我正在使用3个storyBoard和一段代码我得到了ViewController的标识符,但无法调用instantiateViewControllerWithIdentifier,因为我不知道哪个storyBoard属于它。从ViewController获取StoryBoard标识

问题是:是否有可能使用ViewController标识符获取StoryBoard实例/标识符?

此致敬礼!

回答

1

我的应用程序有类似的问题。多视图控制器和多个故事板。 我只是使用包含我的视图控制器的故事板的名称并创建它的新实例。而且,我正在从该故事板实例化一个新的视图控制器。

UIStoryboard * st = [UIStoryboard storyboardWithName:@"storyboardWithViewControllerName" bundle:nil]; 
YourViewController * vc = [st instantiateViewControllerWithIdentifier:@"YourViewControllerId"]; 

希望它可以帮助

2

可以调用instantiateViewControllerWithIdentifier,但如果具有该标识符的视图控制器不存在,您将返回一个零值。

您可以在三个故事板上测试这种方式,直到找到与nil不同的值。

Apple documentation

编辑:检测到异常后(对不起,苹果文档是有点有时混淆),你可以做的是包装你的代码像这样

@try { 
     UIViewController *myViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"myViewControllerID"]; 
    } 
    @catch (NSException *exception) { 
     DLog(@"Exception: This is not the storyboard"); 
    } 
    @finally { 
     DLog(@"I found it!"); 
    } 
一个try/catch块
+0

当我尝试它的应用程序崩溃:'故事板()不包含视图控制器与标识符'blabla'' – MontiRabbit 2013-05-12 02:21:14

0

我已经研究过类似的问题对我的应用程序天。据我所知,无法确定故事板是否包含特定的viewcontroller ID。 Apple的文档希望您事先知道这一点,如果找不到id,它会立即引发异常。

我见过使用try-catch块的建议。玩过它们之后,我发现踏上了非常薄的冰面,如果你有多个故事板可以测试,它会很快变得相当复杂的IMO。

我在我的应用程序中采用的一种方法是为视图控制器提供一个命名方案,它基本上包含它所属的故事板的信息。例如,故事板1中的所有视图控制器都以“1 -...”开头。然后,您可以通过字符串函数在代码中提取此代码,并即时实例化正确的故事板。

相关问题