• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: creating and using a (Reusable) View xib
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: creating and using a (Reusable) View xib


  • Subject: Re: creating and using a (Reusable) View xib
  • From: Jerry Isdale <email@hidden>
  • Date: Sat, 14 Jun 2008 22:50:59 -0700

Last week I asked how I could create a view xib + controller and use it in multiple applications (eg. a stand alone test and an app that integrates several of them.)

Several people responded to my request last week with some tantalizing leads.
The best was Chris Hansen's pointer:
This is a really handy way to create and manage re-usable content for
Cocoa applications.  There are some great articles here:

    NSViewController, the New C in MVC (parts 1 through 3)
    http://katidev.com/blog/2008/04/09/nsviewcontroller-the-new-c-in-mvc-pt-1-of-3/
    http://katidev.com/blog/2008/04/17/nsviewcontroller-the-new-c-in-mvc-pt-2-of-3/
    http://katidev.com/blog/2008/05/26/nsviewcontroller-the-new-c-in-mvc-pt-3-of-3/

However, this nice article shows how to do it with a Document based application.
My app is not document based and I couldnt figure out how to get it working with Kati's hints
I consulted a local cocoa guru and with a bit of self-actualizing, I got it working.
I did not use the XS... stuff in the Kati article. I'm not sure what that would buy us and it had some dependencies that didnt fit with our solution.


To benefit the community.... and myself when I forget this in 6mo, I'm posting my (partial) solution here.
These are a bit cryptic notes, rather than flowing prose and insights ala Katidev, but will hopefully suffice:


Making a reusable View

Application setup -

In XCode
  File->New Project
 	select Cocoa Application
  select Classes group
  Ctrl-Select Classes -> Add->New File : NSApplication Controller
	name it AnApplicationController
  in the .h @interface section insert
	IBOutlet NSWindowController *windowController;
	NSViewController *viewController;
  in the AnApplicationController.m insert:

#import "TheViewController.h"

- (id)init
{
if ( self = [super init] )
{
// substitute yourView's nib + controller names in next line
viewController = [[TheViewController alloc] initWithNibName:@"TheView" bundle:nil];
}
return self;
}


- (void)awakeFromNib
{
[viewController.view setFrame:[windowController.window.contentView frame]];
[windowController.window.contentView addSubview:viewController.view];
}



Ctrl-Select Classes -> Add->New File : Objective-C NSWindowController Subclass
name it AWindowController
Double Click MainMenu.nib to open Interface Builder



In Interface Builder
open Library
drag an Object into MainMenu.nib
open the Inspector
change class to AnApplicationController
drag an Object into MainMenu.nib
select object, view in the Inspector
change class to AnApplicationController
connect window to its controller by Control Drag from WindowController to Window,
connect appController to windowController by ctrl-Drag from appCtrl to window Ctrl



------
Creating the View
In XCode
Ctrl-Click project: Add->New Group
call it TheView
Ctrl-Click TheView: Add->New File ->Objective-C class
name it TheViewController
in the .h, change its superclass to be NSViewController
Ctrl-Click TheView: Add->New File -> Interface Builder -> Cocoa- >View Nib
Add IBOutlets, IBActions, etc as needed to TheViewController


Open TheView.nib in InterfaceBuilder
select File Owner, in Inspector set its class to be The ViewController
control drag from TheViewController to the View
Add widgets to the view, connect them to TheViewController


That should do it.
Of course "TheView" can be replaced by your class/nib name.
----
To copy it to a new project, create the app as above.
But really you probably will be inserting the view into a subview of some view you built


Jerry Isdale
email@hidden



_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


  • Prev by Date: Re: NSOutlineView threading problem
  • Next by Date: Re: Read PSD-Layers with NSImage
  • Previous by thread: Re: NSTextField "setStringValue" method - deallocates?
  • Next by thread: How to disconnect bound views temporarily
  • Index(es):
    • Date
    • Thread