Okay, I just brushed up a bit on toolbars (wow, it's been a *very* long time).

How did you create the instance of RBSStopButtonToolbarItem in the nib?  From 
the docs, I learned that you can drag a view (in your case a button) from the 
IB palette into the Allowed Toolbar Items area.  This should create exactly 
what you wanted: a view-based toolbar item containing an NSButton.  Then you 
could:

* Set the class of the toolbar item to your custom class.
* Set the button's image, alt image, and target in IB.

See 
<https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Toolbars/Articles/ToolbarInIB.html#//apple_ref/doc/uid/TP40008136-SW3>.

Also, aren't you getting lots of NSLog messages from your validate method?  
Validation occurs with every mouse click and keypress, which means you're 
assigning a brand new NSButton to _button over and over and over.

The stuff you're doing in validate would typically be done in awakeFromNib.  
Check the documentation for awakeFromNib; it explains a lot about nib loading.  
BUT it seems to me you don't need any code to create the button.  You can do it 
in IB.

What *should* go in the validate method is logic to enable or disable the 
button as appropriate at any given time.  So you'll still want 
RBSStopButtonToolbarItem to have a button property, but you'll want to:

* Add IBOutlet to the property declaration.
* In IB, connect the toolbar item to the button.
* Implement -[RBSStopButtonToolbarItem validate] to enable the button if a 
"Stop" operation makes sense, otherwise disable it.

--Andy

On Apr 25, 2014, at 1:23 AM, "Peters, Brandon" <bap...@my.fsu.edu> wrote:

> I tried and nothing. The IBOutlet is on the NSToolbarItem custom class. Here 
> is my custom class:
> 
> @interface RBSStopButtonToolbarItem : NSToolbarItem
> {
>     NSButton *_button;
> }
> 
> @property (readwrite) NSButton *button;
> 
> @end
> 
> @implementation RBSStopButtonToolbarItem
> 
> @synthesize button = _button;
> 
> -(id)initWithItemIdentifier:(NSString *)itemIdentifier
> {
>     self = [super initWithItemIdentifier:itemIdentifier];
>     
>     if(self)
>     {
>         // set min and max size
>         [self setMinSize:NSMakeSize(32.0, 32.0)];
>         [self setMaxSize:NSMakeSize(32.0, 32.0)];
>         
>         NSLog(@"Self: %@", self);
>         
>     }
>     return self;
> }
> 
> -(void)validate
> {
>     NSLog(@"Validate called...");
>     // set the original and alternate images...names are "opposite"
>     
>     _button = [[NSButton alloc] initWithFrame:NSMakeRect(0, 0, 32, 32)];
>     
>     //[_button setFrameSize:NSMakeSize(32.0, 32.0)];
>     
>     NSImage *image = [NSImage imageNamed:@"StopButtonAlternateIcon"];
>     [image setSize:NSMakeSize(32.0, 32.0)];
>     [_button setImage:image];
>     
>     image = [NSImage imageNamed:@"StopButtonIcon"];
>     [image setSize:NSMakeSize(32.0, 32.0)];
>     [_button setAlternateImage:image];
>     
>     // image position
>     [_button setImagePosition:NSImageOnly];
>     
>     // set button type
>     [_button setButtonType:NSToggleButton];
>     
>     // button is transparent
>     [_button setBordered:NO];
>     
>     // set the toolbar item view to the button
>     [self setView:_button];
> }
> 
> @end
> 
> The images will display, but the action does not seem to “connect”, even 
> though it is done in IB.


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to