How to display storyboard? (iPhone) - iphone

I've created a storyboard that I want to display using my UINavigationController. The initial view in the storyboard is a UITableViewController so I have created a subclass of UITableViewController and set the class on the storyboard to match it.
I then try to display the storyboard like so:
StoryBoardView *newView = [[StoryBoardView alloc] init];
[self.navigationController pushViewController:newView animated:YES];
However my view is not shown for some reason. Please can someone help me?

When you push the view controller, you need to instantiate the view controller from within your storyboard, not just alloc/init a new instance.
StoryBoardView *newView = [[self storyboard] instantiateViewControllerWithIdentifier:#"<ViewControllerIdentifier>"];

Have you tried when viewing the storyboard, select your very first controller and tick 'Is Initial View Controller'?
That should start your app with that controller.

Related

How to add ViewController on top of tabBarViewcontroller using storyboard?

In my application i want to add a viewcontroller with nib on top of tabbarviewcontroller using storyboard.
for eg; when the application launch for first time i want to show that view controller for once and after that when ever user start the application it should show the tabbarviewcontroller. and not the viewcontroller.
following is my code
-(void)viewDidAppear:(BOOL)animated
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:#"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateInitialViewController];
[vc setModalPresentationStyle:UIModalPresentationFullScreen];
[self presentModalViewController:vc animated:YES];
}
I'm a little confused with how you described what you want. There are a couple of ways to do what you want and depending on how you want things to flow.
Storyboard
If you stay in the storyboard, you can add a UIViewController - in front of your tabbar (to the left of) controller. Basically, add a UIViewController and move the start arrow to it. then create a segue from it to your tabbar controller. You can bring in the tabbar controller via a push segue or even as a modal segue if you want.
You would have to move your xib file into the storyboard.
It would flow like this: UIViewController -> UITabbarController -> Rest of your app.
In this model, the first view controller would always be available on launch.
Another strategy - trying to keep things simple is to use the first view controller attached to the tabbar. It would align with the left most tab.
That view controller gets instantiated and put on screen by the tabbar controller first under normal conditions. You can add code in that UIViewController in the ViewDidLoad or ViewDidAppear methods to instantiate and put up the modal view using either a storyboard or a nib file.
Finally, the last way I can think of would be to load the nib file from your app delegate then display your tabbar from the storybook as a modal. I think this approach is the least desirable, but doable.
hope that helps. good luck.

Add Custom Made View in Interface Builder to Another View?

I have a custom UIViewController in Interface Builder (in my storyboard) and I want to add this view I assembled into another view programatically. I have made a class for the view controller I made but simply importing and adding that custom class as a subview doesn't appear to work.
Any help much appreciated, as always.
You'll need to load an instance of the view controller from the UIStoryboard object and add it's view as a subview. That code would look something like this:
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:#"MainStoryboard" bundle:nil];
MyViewController* myVc = [storyboard instantiateViewControllerWithIdentifier:#"ident"];
[self.view addSubview:myVc.view];
Make sure you set the identifier field for your view controller in IB and pass that to the "instantiateViewControllerWithIdentifier" method.

programmatically creating a UINavigationController

Initially I used the IB to drag a navcontroller onto my tabbar and then setting the root controller. However, I'm trying to create a nav controller without IB.
What I've done is created a navcontroller subclass that will be used in my tabbar. The nav bar does show up so I know that is working.
Now, I need to push a viewcontroller into the hierarchy. In the nav controller's viewDidLoad:
- (void)viewDidLoad {
InfoViewController *initialController = [[InfoViewController alloc] init];
[self.navigationController pushViewController:initialController animated:YES];
[initialController release];
[super viewDidLoad];
}
I get no errors, but nothing shows up in the navigation controller. Anyone know why?
What does your InfoViewController's init method look like? If you're using a nib to build that, then you need to call initWithNib, not init.
Create the viewcontroller when/where you create the navigation controller (and add them to it) then add the list of view controllers to the tabbar.

iPhone SDK: Can't specify view to Navigation Controller

I am working on my first iPhone app and making good progress. But there is one thing I just don't understand.
When my app starts it displays a UIView with some functionality on it. This works fine. One of the buttons on that screen is supposed to load a new view (HistoryViewController) which contains a navigation controller.
The problem is… whenever HistoryViewController is loaded the app crashes because there is no view. It's true because in the xib-File I can't connect the File's Owner's view to anything:
http://www.freeimagehosting.net/image.php?1a3caa8b8d.png
I definitely have a lack of knowledge somewhere but after hours of research I have not been able to solve this problem.
Any hints?
Thank you!
Normally you would either:
click on that bottom line (History Table View Controller, "HTVC") and in the inspector window specify a NIB Name - which means you would first have to make a new NIB.
or
doubleclick that bottom line (HTVC), so the 320x480 preview window pops up, and then drag in a UIView from the library.
Using the first method, you tell the view controller to dynamically load the NIB as the view to connect, and using the second method you do this for the view controller using IB. The view you drag in will then show up as a child of that bottom line (HTVC).
edit to actually load the nib file you created, do this to push the view controller:
UIViewController *controller = [[UIViewController alloc] autorelease];
[controller initWithNibName:#"nibfilename" bundle:nil];
[self.navigationController pushViewController:controller animated:YES];
substituting UIViewController for your own view controller class (if needed) and nibfilename with the filename of the nib (minus the extension!)
It's hard to tell what your problem is exactly, but I'll offer some advice.
When creating a navigation controller (or tab controller for that matter) in interface builder, its easy to not understand what is really happening, so my suggestion drop interface builder for a second and lets build it in code.
In general I really dislike building either UI Navigation Controller or tab view controller in interface builder, I really just rather build the views themselves and create the UINavigationController in code.
You have a view which shows the HistoryTableViewController which you want to be contained in a UINavigationController so the code to do this is:
- (void) showHistory
{
HistoryViewController *historyVC = [[HistoryViewController alloc] init];
// If you create historyviewcontroller in nib
// HistoryViewController *histroyVC [[HistoryViewController alloc] initWithNibName:#"myNib" bundle:nil];
UINavigationController *navController = [[UINavigationController alloc] initWithRootController:histroyViewController];
[self presentModalViewContoller:navController animated:YES];
}
This will create a nav controller showing your history view controller as the root view controller. Can't be easier.

Set a navigation controller without an app delegate

I would like to show a Navigation Controller after clicking a button. Every tutorial assumes the navigation controller will be the first screen so it links it to the App Delegate, but App delegate only appears at MainWindow.xib.
How do you guys add a navigation controller to a view different than the MainWindow?
Thanks!
Here is some sample code to expand on Roger's answer. The following method is linked to some user interaction on the current view controller (to compose an email for example). This will give the compose view the navigation bar across the top instead of coding buttons inside your custom view.
-(void) composeButtonPushed: (id) sender {
ComposeViewController *controller = [[ComposeViewController alloc] initWithNibName:#"ComposeView" bundle:nil];
UINavigationController *composeNavController = [[UINavigationController alloc] initWithRootViewController:controller];
[self presentModalViewController:composeNavController animated:NO];
}
UINavigationController is to navigate a heirarchy of views with UIViewControllers. If you don't have a root UIViewController, it won't work (and doesn;t make sense). If you do have a UIViewController, you simply send a - (id)initWithRootViewController:(UIViewController *)rootViewController init message to a new navigation controller passing in your UIViewController.