I am trying to create a custom subclass of NSScroller. I have created the class, and set it as the vertical scroller on an NSScrollView in IB. When I run my project, the drawRect:
method is called for my subclass, so I know that it is properly connected.
我正在尝试创建NSScroller的自定义子类。我创建了类,并将其设置为IB中NSScrollView上的垂直滚动条。当我运行我的项目时,为我的子类调用drawRect:方法,所以我知道它已正确连接。
Now, How do I change the width of my fancy new NSScroller? No matter what I do to its bounds and frame, it always wants to draw in a rectangle 15 pixels wide (the size of the default NSScroller).
现在,我如何更改我的新NSScroller的宽度?无论我对它的边界和框架做什么,它总是想要绘制一个15像素宽的矩形(默认NSScroller的大小)。
2 个解决方案
#1
2
In your NSScroller subclass, you have to override scrollerWidth:
在NSScroller子类中,您必须覆盖scrollerWidth:
+(CGFloat)scrollerWidth
{
return 30.0;
}
This is the value that NSScrollView uses to define the frame for your component when it sets it up.
这是NSScrollView在设置组件时用于定义组件框架的值。
#2
1
You can use categories to override the scroller width method for all NSScrollers.
您可以使用类别覆盖所有NSScroller的滚动条宽度方法。
Eg. In NSScroller-MyScroller.h:
例如。在NSScroller-MyScroller.h中:
#import <Cocoa/Cocoa.h>
@interface NSScroller (MyScroller)
+ (CGFloat)scrollerWidth;
+ (CGFloat)scrollerWidthForControlSize: (NSControlSize)controlSize;
@end
In NSScroller-MyScroller.m:
#import "NSScroller-MyScroller.h"
#define SCROLLER_WIDTH 30.0
@implementation NSScroller (MyScroller)
+ (CGFloat)scrollerWidth {
return SCROLLER_WIDTH;
}
+ (CGFloat)scrollerWidthForControlSize: (NSControlSize)controlSize {
return SCROLLER_WIDTH;
}
@end
#1
2
In your NSScroller subclass, you have to override scrollerWidth:
在NSScroller子类中,您必须覆盖scrollerWidth:
+(CGFloat)scrollerWidth
{
return 30.0;
}
This is the value that NSScrollView uses to define the frame for your component when it sets it up.
这是NSScrollView在设置组件时用于定义组件框架的值。
#2
1
You can use categories to override the scroller width method for all NSScrollers.
您可以使用类别覆盖所有NSScroller的滚动条宽度方法。
Eg. In NSScroller-MyScroller.h:
例如。在NSScroller-MyScroller.h中:
#import <Cocoa/Cocoa.h>
@interface NSScroller (MyScroller)
+ (CGFloat)scrollerWidth;
+ (CGFloat)scrollerWidthForControlSize: (NSControlSize)controlSize;
@end
In NSScroller-MyScroller.m:
#import "NSScroller-MyScroller.h"
#define SCROLLER_WIDTH 30.0
@implementation NSScroller (MyScroller)
+ (CGFloat)scrollerWidth {
return SCROLLER_WIDTH;
}
+ (CGFloat)scrollerWidthForControlSize: (NSControlSize)controlSize {
return SCROLLER_WIDTH;
}
@end