Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to show my cocoa touch framework storyboard screen?

I created a simple Cocoa touch framework with a storyboard. In my framework i have a MainViewController.swift viewcontroller. I created a new single view project, imported my framework and tried to load my framework viewcontroller, but i got black screen. And I dont know why.

I tried load framework with this code:

let frameworkScreen : UIViewController = MainViewController()
    self.presentViewController(frameworkScreen, animated: true, completion: nil)
like image 537
just Avatar asked May 17 '15 14:05

just


People also ask

How do I get a view controller from storyboard?

In the Storyboard, select the view controller that you want to instantiate in code. Make sure the yellow circle is highlighted, and click on the Identity Inspector. Set the custom class as well as the field called "Storyboard ID". You can use the class name as the Storyboard ID.

Where is storyboard in Xcode?

storyboard from the Project Navigator (on the left side of Xcode). Once the Storyboard loads in the center pane, use the Object library to add a button to the storyboard. Change the title of the button to “Push me”. Figure 1: Add a View Controller to the storyboard and drop it to the right of the first scene.

What is Cocoa Touch static library?

Cocoa Touch Static Library. A. A static library is a collection of compiled source files which is then linked directly into an app's binary.


2 Answers

You need to load the view controller by instantiating it from the storyboard in the framework.

Here's how. First some initial conditions:

  • Let's say your framework is called Coolness.

  • Let's say your framework's storyboard is called CoolnessStoryboard.storyboard.

  • Let's say your framework has a public class called CoolnessViewController.

  • Let's say that CoolnessStoryboard has a scene whose view controller is CoolnessViewController and that this is its initial view controller.

Then in your main code you would import Coolness and, to present your CoolnessViewController from the storyboard, you would say:

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

Note the strategy here. Work backwards from the goal. We need the instance of CoolnessViewController that is in the storyboard. To get that, we need a reference to that storyboard. To do that, we need to identify that storyboard. How? We can identify it by name and by the bundle that it is in. But how can we identify that bundle? We can identify the bundle by means of a class in that bundle. We have such a class, because we have imported the framework (import Coolness) and the class there is public (so we can speak of it).

like image 128
matt Avatar answered Sep 24 '22 08:09

matt


I had the same problem. This is how I solved after a little research:

1 - I have a framework called "Messenger.framework"

2 - Inside it, I have a storyboard file called "Messenger.Storyboard"

3- My initial view controller is a UINavigationController with a rootViewController and my ChatController.

So this is how a present my framework's chat UIViewController:

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

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

I hope this helps you.

like image 24
rcmstark Avatar answered Sep 22 '22 08:09

rcmstark