Skip navigation.
 
mlwrapping multiple IBOutlet objects for reuse
FROM : Paul Archibald
DATE : Tue Jun 24 20:21:50 2008

Is there a way to use class objects that wrap multiple IBOutlet objects?

The app I am working on has groups of interface elements that are 
repeated on the interface and in the code. Let me see if I can 
illustrate what I mean:

The window looks (slightly) like this:

(button_set_src_1) (add) (delete) (halt) (progressbar1)
(button_set_src_2) (add) (delete) (halt) (progressbar2)
(button_set_src_3) (add) (delete) (halt) (progressbar3)

And the code looks (slightly) like this:

IBOutlet NSTextField             *src1;
IBOutlet NSProgressIndicator     *progressbar1;
IBOutlet NSTextField             *dest1;
IBOutlet NSButton               *halt1;
IBOutlet NSButton               *remove1;
IBOutlet NSTextField        *precentdone1;

IBOutlet NSTextField             *src2;
IBOutlet NSProgressIndicator     *progressbar2;
IBOutlet NSTextField             *dest2;
IBOutlet NSButton               *halt2;
IBOutlet NSButton               *remove3;
IBOutlet NSTextField        *precentdone2;

IBOutlet NSTextField             *src3;
IBOutlet NSProgressIndicator     *progressbar3;
IBOutlet NSTextField             *dest3;
IBOutlet NSButton               *halt3;
IBOutlet NSButton               *remove3;
IBOutlet NSTextField        *precentdone3;

This is pretty klunky, and I would like something more like:
@interface Element : NSObject
{
   IBOutlet NSTextField             *src;
   IBOutlet NSProgressIndicator     *progressbar;
   IBOutlet NSTextField             *dest;
   IBOutlet NSButton               *halt;
   IBOutlet NSButton               *remove;
   IBOutlet NSTextField        *precentdone;
}
@end

...
   Element *e1;
   Element *e2;
   Element *e3;

or even better, an array of Elements:

   NSArray *elements [[NSArray alloc] initWithObjects:
       e1, e2, e3];
       .... not sure exactly how to do this, but you get the idea..


But, while the code part seems easy enough, I am not sure how it 
would work with Interface Builder. Is it possible to create a custom 
class like that (Element), and place instances of it on a window in 
IBuilder, hook up the controls in the code? Maybe someone can help me 
with terminology or examples? I know what I want, but I don't know 
enough about Cocoa yet to express it.

Related mailsAuthorDate
mlwrapping multiple IBOutlet objects for reuse Paul Archibald Jun 24, 20:21
mlRe: wrapping multiple IBOutlet objects for reuse Keary Suska Jun 24, 22:36
mlRe: wrapping multiple IBOutlet objects for reuse Markus Spoettl Jun 24, 23:24