如何显示我的 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)
}
我创建了一个带有故事板的简单 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)
}