Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cocoa - Display xib on another xib

Can anyone tell me how (or direct me to info on) displaying a .xib (nib) on another .xib (nib).

How ever I wish to place it so I can programically move it around the main nib sort of like this (which obviously doesn't work)

- (void)drawRect:(NSRect)dirtyRect
{

    NSRect customView = NSMakeRect(pos1, pos1, 200, 100);

    [[NSBundle mainBundle] loadNibNamed:@"secondXib" owner:self];

    NSRectFill (customView);
}

And I wish to do this for Mac OS X (Not iPhone). (By the way using xCode 4 incase it makes a difference)

like image 512
user1276691 Avatar asked Mar 18 '12 08:03

user1276691


2 Answers

You can easily load a view from another nib using NSViewController. In your nib you should just set File's Owner's custom class to NSViewController and hook up the view outlet of File's Owner to point to the view you want to load. You can then just do this:

//create an NSViewController and use it to load the nib
NSViewController* vc = [[NSViewController alloc] initWithNibName:@"YourNibName" bundle:nil];
//get the view from the view controller
NSView* loadedView = [vc view];
//release the view controller so we don't leak
[vc release];
//add the view as a subview of your main view
[mainView addSubview:loadedView];
//position the view
[loadedView setFrameOrigin:NSMakePoint(100.0, 100.0)];

You don't need to do anything in drawRect:. The subview will draw itself, and drawRect: will be called automatically if you move the subview.

You should read the View Programming Guide for Cocoa. It is critical to understanding how views work, and it is clear from your question that you do not yet have that understanding.

You should also read the Cocoa Drawing Guide.

like image 62
Rob Keniger Avatar answered Nov 02 '22 16:11

Rob Keniger


Thanks a lot, Another alternative ( which is basically the non programming way of doing it ), is to add a NSViewController object in your first xib, and set it to you use the nib name that you specify. In your second xib, don't forget to set the class name in the "custom class" field on the view ( and NSViewController on file's owner ) else that won't work.

like image 44
Music and Lights Avatar answered Nov 02 '22 16:11

Music and Lights