imageRectForBounds не вызывается в подклассе NSButtonCell
Мне нужно было создать NSButton с изображением и заголовком, но мне не понравился ни один из стандартных методов позиционирования в какао.
Я решил создать подкласс ячейки кнопки и переопределить -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
1 ответ
С небольшой отладкой я понимаю, что по умолчанию 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];
}