画像とタイトルの両方を持つ NSButton を作成する必要がありましたが、ココアの標準的な配置方法がどれも好きではありませんでした。
ボタン セルをサブクラス化してオーバーライドし-imageRectForBounds:
、-titleRectForBounds:
独自の位置を提供することにしました。問題は、-titleRectForBounds:
メソッドが正常に呼び出されることですが、-imageRectForBounds:
そうではありません。
ボタンの画像は通常どおり表示されるため、セルには画像を描画するためのフレームが必要です。どこから取得するのかわかりません。
コードは実にシンプルです。現時点で私がしたことは、NSButtonCell をサブクラス化し、これら 2 つのメソッドをオーバーライドすることだけです。次に、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