我正在使用3个storyBoards,在一段代码中我得到了一个ViewController的标识符但是无法调用instantiateViewControllerWithIdentifier,因为我不知道哪个storyBoard属于它。
问题是:是否可以使用ViewController标识符获取StoryBoard实例/标识符?
祝你好运!
答案 0 :(得分:2)
您可以调用instantiateViewControllerWithIdentifier,但如果具有该标识符的视图控制器不存在,您将获得返回的nil值。
您可以在三个故事板上以这种方式进行测试,直到找到不等于nil的值。
已编辑:检测到异常后(抱歉,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 -...”开头。然后,您可以通过字符串函数在代码中提取它,并动态实例化正确的故事板。