我正在使用 3 个故事板,并且在一段代码中,我得到了 ViewController 的标识符,但无法调用 instantiateViewControllerWithIdentifier,因为我不知道哪个故事板属于它。
问题是:是否可以使用 ViewController 标识符获取 StoryBoard 实例/标识符?
最好的祝福!
我正在使用 3 个故事板,并且在一段代码中,我得到了 ViewController 的标识符,但无法调用 instantiateViewControllerWithIdentifier,因为我不知道哪个故事板属于它。
问题是:是否可以使用 ViewController 标识符获取 StoryBoard 实例/标识符?
最好的祝福!
您可以调用 instantiateViewControllerWithIdentifier,但如果具有该标识符的视图控制器不存在,您将返回一个 nil 值。
你可以在你的三个故事板上测试这种方式,直到你找到一个不同于 nil 的值。
请参阅Apple 文档
编辑:在检测到异常之后(抱歉,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!");
}
我的应用程序有类似的问题。多个视图控制器和多个故事板。我只是使用包含我的视图控制器的故事板的名称并创建它的新实例。而不是我从那个故事板实例化一个新的视图控制器。
UIStoryboard * st = [UIStoryboard storyboardWithName:@"storyboardWithViewControllerName" bundle:nil];
YourViewController * vc = [st instantiateViewControllerWithIdentifier:@"YourViewControllerId"];
希望能帮助到你
我已经为我的应用程序研究了几天的类似问题。据我所知,无法确定情节提要是否包含特定的视图控制器 ID。Apple 的文档希望您事先知道这一点,如果找不到 id,它会立即引发异常。
我已经看到使用 try-catch 块的建议。和他们一起玩过之后,我发现这简直是如履薄冰,如果你有多个故事板要测试,它很快就会变得相当复杂 IMO。
我在我的应用程序中采用的一种方法是为视图控制器提出一个命名方案,该方案基本上包括它所属的故事板的信息。例如,情节提要 1 中的所有视图控制器都以“1-...”开头。然后,您可以通过字符串函数在代码中提取它,并即时实例化正确的情节提要。