如何让我的NSScroller子类具有不同的宽度?

时间:2021-12-06 17:09:10

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