Показване на икона и текст в същата клетка на NSTableView

Бих искал да покажа икона до текстов елемент в една клетка на табличен изглед.

Пример за това, което искам да постигна, е списъкът с приложения в System Preferences -> User Accounts -> Login Items.

Какво е добър начин?


person Nick Moore    schedule 02.08.2010    source източник


Отговори (1)


Тук има добър пример как да го направите: http://www.cocoadev.com/index.pl?IconAndTextInTableCell Вие правите свой собствен персонализиран NSCell, който едновременно рисува изображение и текст

@interface IconCell : NSCell 
{
NSArray * cellValue;
}
- (void)setObjectValue:(id <NSCopying>)object;
- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;

@implementation IconCell

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
NSDictionary * textAttributes =
    [NSDictionary dictionaryWithObjectsAndKeys:[NSFont 
userFontOfSize:10.0],NSFontAttributeName, nil];
NSPoint cellPoint = cellFrame.origin;

[controlView lockFocus];

[[cellValue objectAtIndex:1] compositeToPoint:NSMakePoint(cellPoint.x+2,
cellPoint.y+14) operation:NSCompositeSourceOver];
[[cellValue objectAtIndex:0] drawAtPoint:NSMakePoint(cellPoint.x+18,
cellPoint.y) withAttributes:textAttributes];

[controlView unlockFocus];
}

- (void)setObjectValue:(id <NSCopying>)object
{
   cellValue = (NSArray *)object;
}
@end
person Jonas Jongejan    schedule 02.08.2010
comment
Струва си да се отбележи, че тази клетка изисква източникът на данни да обслужва масив от (име на файл, икона) като стойност на обекта. Допълнителен кредит за питащия: Адаптирайте кода на клетката, за да очаквате NSURL като стойност на обекта, и получете както името на файла, така и иконата от него. - person Peter Hosey; 02.08.2010
comment
Готини, добри неща. Това, което всъщност правя в момента, е да обвържа моя изглед на таблица чрез контролер на масив към масив от идентификатори на пакети, чрез трансформатор на стойност, който преобразува идентификатора на пакета в показвано име на приложението. Мисля, че моят преобразувател на стойност може да изведе комбинацията от изображение и текст, която клетката да изчертае. Така или иначе ще трябва да прочета за NSCell сега. Нещо, с което не съм се сблъсквал досега... - person Nick Moore; 02.08.2010
comment
Използването на метода -tableView:willDisplayCell: делегат за задаване на частта от изображението избягва необходимостта от използване на масив като стойност на обекта. Може също така да се смесва свободно с Bindings. - person Joshua Nozzi; 02.08.2010