如何展示我的cocoa触摸框架故事板屏幕?
我用故事板创建了一个简单的Cocoa触摸框架。 在我的框架中,我有一个MainViewController.swift viewcontroller。 我创建了一个新的单一视图项目,导入我的框架并尝试加载我的框架viewcontroller,但我有黑屏。 而且我不知道为什么。
我尝试使用以下代码加载框架:
let frameworkScreen : UIViewController = MainViewController() self.presentViewController(frameworkScreen, animated: true, completion: nil)
您需要通过从框架中的storyboard实例化来加载视图控制器。
就是这样。 首先是一些初始条件:
-
假设您的框架名为Coolness。
-
假设你的框架的故事板叫做CoolnessStoryboard.storyboard 。
-
假设您的框架有一个名为CoolnessViewController的
public
类。 -
假设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实例。 为此,我们需要对该故事板的引用。 为此,我们需要确定故事板。 怎么样? 我们可以通过名称和它所在的包来识别它。但是我们如何识别该包呢? 我们可以通过该捆绑中的类来识别捆绑包。 我们有这样一个类,因为我们已经导入了框架( import Coolness
),而且这个类是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
,并且storyboard名称是Main
,则使用带有storyboard id vc
的viewcontoller
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包含了框架。