Re: wrapping multiple IBOutlet objects for reuse
Re: wrapping multiple IBOutlet objects for reuse
- Subject: Re: wrapping multiple IBOutlet objects for reuse
- From: Markus Spoettl <email@hidden>
- Date: Tue, 24 Jun 2008 14:24:55 -0700
On Jun 24, 2008, at 1:36 PM, Keary Suska wrote:
I would have each "row" of controls as a vanilla NSView in a
separate nib.
Your controller class, which would be the nib owner, could manage
each "set"
of controls. You'll need to familiarize yourself with nib loading
(particularly NSNib's methods) and the cocoa drawing system
(particularly
views and subviews, and the coordinate system), at least. There may
be more
that I am not thinking of.
In addition to what Keary Suska said, you can use NSViewController to
manage the custom compound view located it's own NIB. NSViewController
will manage memory, help with bindings and general management.
Basically everyhing you would have to do manually otherwise.
NSViewController is available in 10.5.
See http://developer.apple.com/documentation/Cocoa/Reference/NSViewController_Class/Introduction/Introduction.html
for more information.
The basic steps are these:
1) create a custom NSViewController derived class (MyViewController)
which will manage one row of controls in your UI (define outlets for
one row)
2) create a view XIB/NIB in Xcode and set it up in IB.
3) In IB make sure you set the File's Owner class to your custom
NSViewController class.
4) Set the view outlet of the File's Owner to your compound view in
the XIB
5) Add other views, controls buttons and wire them to the outlets in
the custom controller.
6) Prepare your main UI by setting up a container view that will host
the compound view and create an outlet for that view (container).
7) In the main controller (the one that embeds the individual rows),
create an instance of your view controller like this:
myViewController = [[MyViewController alloc]
initWithNibName:@"MyViewNib" bundle:nil];
(release it in -dealloc of that class).
8) Embed the compound view in your container using:
[container addSubview:[myViewController view]];
[[myViewController view] setFrame:<WHERE_YOUR_WANT_IT>];
[[myViewController view] setHidden:NO];
9) You can also use NSViewControllers representedObject to wire
bindings or add your own UI management code that loads and saves data.
10) Repeat steps 7-9 for each row you need to display.
In your case you would have an array of MyViewControllers than let you
access the individual rows.
Hope this helps.
Regards
Markus
--
__________________________________________
Markus Spoettl
Attachment:
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________
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