从ViewController标识符中获取StoryBoard

时间:2013-05-11 22:41:55

标签: ios ios5 uiviewcontroller storyboard

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

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

祝你好运!

3 个答案:

答案 0 :(得分:2)

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

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

请参阅Apple documentation

已编辑:检测到异常后(抱歉,Apple文档有时会让人感到困惑),您可以做的就是用这样的try / catch块包装代码

    @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!");
    }

答案 1 :(得分:1)

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

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

希望有所帮助

答案 2 :(得分:0)

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

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

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