Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Loading UIViewController "from" Nib File

I am trying to create an UIViewController from a Nib file. On Google I found that I can only load an UIView from Nib.

But some suggests that I could create a Nib file (of UIView) whose File Owner is set to our ViewController.

That is what I did, I got no crashes, but the View is just not displayed.

EDIT: Tried to push the viewcontroller like this

self.navigationController!.pushViewController(CoolViewController(), animated: true );

But it still showing black screen when it is pushed

XCode 6.3 - Not using Storyboards

like image 972
JayVDiyk Avatar asked May 19 '15 03:05

JayVDiyk


2 Answers

Try this, you can load a UIViewController with nibName:

Swift

self.navigationController!.pushViewController(CoolViewController(nibName: "CoolViewControllerNibName", bundle: nil), animated: true ) 

Objective-C

CoolViewController*coolViewCtrlObj=[[CoolViewController alloc] initWithNibName:@"CoolViewControllerNibName" bundle:nil]; [self.navigationController pushViewController:coolViewCtrlObj  animated:YES]; 
like image 66
Sudhin Davis Avatar answered Oct 12 '22 23:10

Sudhin Davis


You need to allocate your ViewController, then initialize it by telling the iOS the name of the nib.

I see you're using Swift; I'm afraid I don't know swift, only objective-c. But here is how it would be done in objective-c:

[self.navigationController pushViewController [[[CoolViewController alloc] initWithNibName: @"CoolDesign" bundle: nil] autorelease];

... where "CoolDesign" is the base name of your nib. That is, you create CoolDesign.xib in Interface Builder, Xcode compiles the XML - text - xib into CoolDesign.nib, then you tell initWithNibName to open just @"CoolDesign".

It's not enough just to tell Interface Builder that a design document is a UIViewController. While in principle the iOS could figure out what you mean, also in principle you could have multiple nibs for a single UIViewController subclass.

like image 30
Mike Crawford Avatar answered Oct 13 '22 01:10

Mike Crawford