gpt4 book ai didi

objective-c - imageRectForBounds 未在 NSButtonCell 子类中调用

转载 作者:太空狗 更新时间:2023-10-30 03:54:07 27 4
gpt4 key购买 nike

我需要创建一个包含图像和标题的 NSButton,但我不喜欢 cocoa 中的任何标准定位方法。

我决定子类化纽扣单元并覆盖 -imageRectForBounds:-titleRectForBounds: 以提供我的自定义位置。问题是 -titleRectForBounds: 方法被正常调用但 -imageRectForBounds: 不是。

按钮中的图像正常显示,因此单元格必须有一个框架来绘制图像我只是不知道它从哪里得到的。

代码非常简单。目前我唯一做的就是子类化 NSButtonCell 并覆盖这两个方法。然后在 IB 中,我选择一个 NSButton 并将其单元格类更改为我的自定义按钮单元格。

代码如下:

#import "JSButtonCell.h"

@implementation JSButtonCell

- (NSRect)titleRectForBounds:(NSRect)theRect
{
NSLog(@"Bounds for title");
NSLog(@"%@",NSStringFromRect(theRect));
NSRect titleRect = [super titleRectForBounds:theRect];
NSLog(@"Title rect");
NSLog(@"%@",NSStringFromRect(titleRect));
return titleRect;
}

- (NSRect)imageRectForBounds:(NSRect)theRect
{
NSLog(@"Bounds for image");
NSLog(@"%@",NSStringFromRect(theRect));
NSRect imageRect = [super imageRectForBounds:theRect];
NSLog(@"Image rect");
NSLog(@"%@",NSStringFromRect(imageRect));
imageRect.origin.y -= 20;
return imageRect;
}

@end

最佳答案

据我所知,几乎没有调试,默认的 NSButtonCell 实现不会调用 drawImage:withFrame:inView:。为什么?我在论坛和 Apple 文档中都找不到答案(如果有人解释 - 我会很高兴:)。我通过简单地覆盖 drawImage:withFrame:inView: 并调用 imageRectForBounds::

解决了这个问题
- (void)drawImage:(NSImage *)image withFrame:(NSRect)frame inView:(NSView *)controlView
{
[super drawImage:image withFrame:[self imageRectForBounds:frame] inView:controlView];
}

关于objective-c - imageRectForBounds 未在 NSButtonCell 子类中调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13393922/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com