如何显示我的 cocoa 触摸框架故事板屏幕?

How to show my cocoa touch framework storyboard screen?

我创建了一个带有故事板的简单 Cocoa 触摸框架。在我的框架中,我有一个 MainViewController.swift viewcontroller。 我创建了一个新的单视图项目,导入了我的框架并尝试加载我的框架 viewcontroller,但我遇到了黑屏。我也不知道为什么。

我尝试使用此代码加载框架:

let frameworkScreen : UIViewController = MainViewController()
    self.presentViewController(frameworkScreen, animated: true, completion: nil)

您需要通过实例化视图控制器来加载视图控制器从框架中的故事板

方法如下。首先是一些初始条件:

  • 假设您的框架名为 Coolness。

  • 假设您的框架的故事板名为 CoolnessStoryboard.storyboard.

  • 假设您的框架有一个名为 CoolnessViewController 的 public class。

  • 假设 CoolnessStoryboard 有一个视图控制器是 CoolnessViewController 的场景,这是它的初始视图控制器。

然后在你的主要代码中你会 import Coolness 并且,为了从情节提要中展示你的 CoolnessViewController,你会说:

let s = UIStoryboard (
    name: "CoolnessStoryboard", bundle: NSBundle(forClass: CoolnessViewController.self)
)
let vc = s.instantiateInitialViewController() as! UIViewController
self.presentViewController(vc, animated: true, completion: nil)

注意这里的攻略。从目标向后工作。我们需要故事板 中的 CoolnessViewController 实例 。为此,我们需要引用该故事板。为此,我们需要确定该故事板。如何?我们可以通过名称和它所在的包来识别它。但是我们如何识别该包呢?我们可以通过该捆绑包中的 class 来识别该捆绑包。我们这样的class,因为我们导入了框架(import Coolness),class有public(所以我们可以说出来)。

我遇到了同样的问题。这是我经过一番研究后解决的方法:

1 - 我有一个名为 "Messenger.framework"

的框架

2 - 在其中,我有一个名为 "Messenger.Storyboard"

的故事板文件

3- 我的初始视图控制器是一个带有 rootViewController 和我的 ChatController 的 UINavigationController。

这就是展示我的框架的聊天 UIViewController 的方式:

- (void)presentChatController
{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Messenger"
                                                         bundle:[NSBundle bundleForClass:ChatController.class]];

    ChatController *controller = [storyboard instantiateViewControllerWithIdentifier:@"Chat"];
    [self.navigationController pushViewController:controller animated:YES];
}

希望对您有所帮助。

如果您的框架名称是 MyFramework,故事板名称是 Main,并且视图控制器的故事板 ID 是 vc

if let urlString = NSBundle.mainBundle().pathForResource("MyFramework", ofType: "framework", inDirectory: "Frameworks") {
  let bundle = (NSBundle(URL: NSURL(fileURLWithPath: urlString)))
  let sb = UIStoryboard(name: "Main", bundle: bundle)
  let vc = sb.instantiateViewControllerWithIdentifier("vc")
  self.showViewController(vc, sender: nil)
}

我已经包含了使用 cocoapods 的框架。

Swift5.5、Xcode13和iOS15

if let urlString = Bundle.main.path(forResource: "MyFramework", ofType: "framework", inDirectory: "Frameworks") {
   let bundle = (Bundle(url: NSURL(fileURLWithPath: urlString) as URL))
   let sb = UIStoryboard(name: "Main", bundle: bundle)
   let vc = sb.instantiateViewController(withIdentifier: "vc")
   self.show(vc, sender: nil)
}