12

我有这行代码:

[UIStoryboard storyboardWithName:(NSString *) bundle (NSBundle *)];

和故事板文件。我在哪里实际插入控制器的名称,在哪里可以找到捆绑包?

这是一个愚蠢的问题,但我无法弄清楚

4

4 回答 4

14

一切都非常简单!

这是代码:

UIStoryboard *storyboard = 
[UIStoryboard storyboardWithName:@"MainStoryboard" 
                          bundle:[NSBundle mainBundle]];

@"Main Storyboard"在哪里是您的.storyboard文件的名称。Bundle 只是包含你的.storyboard文件的包,通常是你的应用程序的主要包。

如果您想访问某些 UIViewController,例如,为了将其推送到 UINavigationController 的堆栈,那么您必须这样做:

UIViewController *yourViewController = 
[storyboard instantiateViewControllerWithIdentifier:@"viewControllerIdentifier"];

您可以在 Xcode 的 Identity Inspector 中将 Identifier 设置为您的 UIViewController!

希望对你有帮助!

于 2012-09-21T15:47:20.460 回答
8

name参数是文件名称.storyboard(不带扩展名)。

通常bundle是您的应用程序的主要捆绑包。通常,您通过nil,以便运行时默认在主包中搜索您的故事板文件(与您通过相同[NSBundle mainBundle])。在实践中,iOS 应用程序中通常只有一个包,它是代表 IPA 包的主包,因此nil该参数的常用值也是如此)

例如,如果你有一个名为MyStory.storyboardyour 的故事板,你会写:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyStory" bundle:nil];

实际上,所有这些都在 Apple 文档中对此方法进行了解释。

故事板名称:捆绑:

为指定的故事板资源文件创建并返回一个故事板对象。

+ (UIStoryboard *)storyboardWithName:(NSString *)name bundle:(NSBundle *)storyboardBundleOrNil

参数

  • name:故事板资源文件的名称,不带文件扩展名。如果此参数为 nil,则此方法引发异常。
  • storyboardBundleOrNil:包含故事板文件及其相关资源的包。如果您指定 nil,此方法会在当前应用程序的主包中查找。
于 2012-09-21T15:47:17.943 回答
5
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
于 2015-08-21T10:49:18.777 回答
2

斯威夫特 5 版本:

UIStoryboard(name: "Main", bundle: nil)

在此示例中,我使用默认的“主要”故事板文件作为参考。

于 2019-05-02T21:32:10.453 回答