Mailing Lists: Apple Mailing Lists

Image of Mac OS face in stamp
 
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Fixing NSSegmentedControl Display Bug



All has been fixed! It seems to always happen that just when you ask for help you figure it out.

I was making a bit of a mistake in the preference pane viewer with dynamic loading of the principal class of the bundle. Apparently, and I didn't know this, if the class you specify in the Plist file can't be found, XCode assigns any other class it can find as the principal class. All is well.

On Dec 28, 2006, at 12:09 PM, Benjamin Einstein wrote:

Hi All:

As you may know, there's a display bug with NSSegmentedControl when using NSTexturedBackgroundWindowMask window style and size Regular for the control. Like most mac developers, the 1 or 2 missing pixels from the top of the control really gets to me and I HAVE to fix this problem. Luckily, I found a post of someone using a brilliant little trick to override a private method that fixes the display bug:

#import <Cocoa/Cocoa.h>
#define NormalSegmentedCellStyle 1
#define FlatSegmentedCellStyle 2

@interface FixedSegmentedControl : NSSegmentedControl {

}
@end

@interface NSSegmentedCell ( PrivateMethod )
- (void)_setSegmentedCellStyle:(int)style;
@end

@implementation FixedSegmentedControl
- (void)awakeFromNib
{
    [self setFrameSize:NSMakeSize([self frame].size.width, 25)];
}

- (NSCell *)cell
{
    NSSegmentedCell *cell = [super cell];
    [cell _setSegmentedCellStyle:FlatSegmentedCellStyle];
    return cell;
}
@end

This works beautifully when run in any app I have that uses my custom window backing (which takes advantage of NSTexturedBackgroundWindowMask), however, I get the following when used in a preference pane:
[Session started at 2006-12-28 12:06:12 -0500.]
2006-12-28 12:06:15.708 MyApp[873] *** -[FixedSegmentedControl initWithBundle:]: selector not recognized [self = 0x3c5790]
2006-12-28 12:06:15.713 MyApp[873] Exception raised during posting of notification. Ignored. exception: *** -[FixedSegmentedControl initWithBundle:]: selector not recognized [self = 0x3c5790]


InitWithBundle gets called for the class of the prefpane not of the control within it (as far as I know). I've spend about 6 hours on this problem and can't figure it out!

I also get this very bizarre error when dragging my .h file into IB:
"Cannot define a category for unknown class NSSegmentedCell"
But the Custom class shows up and all appears normal.

Any help would be greatly appreciated!

_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:
http://lists.apple.com/mailman/options/cocoa-dev/beinstein% 40comcast.net


This email sent to email@hidden

_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:
http://lists.apple.com/mailman/options/cocoa-dev/email@hidden

This email sent to email@hidden
References: 
 >Fixing NSSegmentedControl Display Bug (From: Benjamin Einstein <email@hidden>)



Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Contact Apple | Terms of Use | Privacy Policy

Copyright © 2007 Apple Inc. All rights reserved.