Отображение изображения перед текстом в NSButtonCell в NSMatrix

Я показываю кнопки в NSMatrix.

Мое требование:

изменить цвет заголовка кнопки и разместить изображение в начале заголовка, когда выполняется определенное условие.

Для этого я использовал следующий код:

// setting  attributed text
            NSAttributedString *selectedCellAttribute;

            NSFont *selectedCellFont = [NSFont fontWithName:@"Lucida Grande" size:11];
            NSColor *selectedCellColor = [NSColor redColor];
            NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
            [style setAlignment:NSCenterTextAlignment];

            // setting image
            NSTextAttachment *imageAttachment = [[NSTextAttachment alloc] init];
            NSCell *cell = [imageAttachment attachmentCell];
            [cell setImage:[NSImage imageNamed:@"caution_small.png"]];

            NSDictionary *selectedCellDictionary = [NSDictionary dictionaryWithObjectsAndKeys:imageAttachment,NSAttachmentAttributeName,selectedCellFont,NSFontAttributeName,selectedCellColor,NSForegroundColorAttributeName,style,NSParagraphStyleAttributeName,nil];

            // recognizing cell

            NSButtonCell *associatedCell = [associatesMatrix cellAtRow:0 column:2];
            selectedCellAttribute = [[NSAttributedString alloc] initWithString:[associatedCell title] attributes:selectedCellDictionary];
            [associatedCell setAttributedTitle:selectedCellAttribute];

Хотя приведенный выше код показывает изменение цвета заголовка, он не показывает изображение, помещенное в начало заголовка :(

Может ли кто-нибудь предложить мне, где я могу ошибаться, или какой-то другой способ реализовать мои требования?

РЕДАКТИРОВАТЬ:

В строке:

NSCell *cell = [imageAttachment attachmentCell];

он дает это предупреждение при компиляции:

type 'id <NSTextAttachmentCell>' does not conform to 'NSCopying" protocol.

Спасибо,

Мирадж


person Devarshi    schedule 23.08.2010    source источник
comment
Не забудьте освободить изменяемый стиль абзаца, вложение и строку с атрибутами, если вы не используете сборщик мусора.   -  person Peter Hosey    schedule 23.08.2010
comment
спасибо за ваш ответ... приложение поддерживает GCC!   -  person Devarshi    schedule 23.08.2010
comment
Вы имели в виду ГК? GCC — это коллекция компиляторов GNU, и какой компилятор вы используете, не имеет значения. GC — это сборка мусора, при которой отправка сообщений Objective-C release не является строго обязательной (но не делать этого — хороший способ получить ненавязчивые напоминания о том, что «вам нужно выпустить эти вещи, если вы не используете GC» при публикации сообщения). код на Stack Overflow ☺).   -  person Peter Hosey    schedule 23.08.2010


Ответы (1)


Вы установили вложение для всей строки. Что вам нужно сделать, так это префикс строки с NSAttachmentCharacter и установить вложение только для этого раздела строки.

Вы можете поставить пробел между NSAttachmentCharacter и вашим текстом. Только NSAttachmentCharacter должен иметь атрибут вложения.

person Peter Hosey    schedule 23.08.2010
comment
Я просмотрел ссылку на класс NSAttributedString, но в ней я не понимаю, как использовать NSAttachmentCharacter :( - person Devarshi; 23.08.2010
comment
Вам нужно вставить его в начало строки и применить к нему атрибут вложения. - person Peter Hosey; 23.08.2010