2010-08-23 2 views
0

Я показываю кнопки в NSMatrix.Отображение изображения перед текстом в NSButtonCell в 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]; 

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

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

EDIT:

В строке:

NSCell *cell = [imageAttachment attachmentCell]; 

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

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

Спасибо,

Miraaj

+0

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

+0

thanx для вашего ответа ... приложение включено GCC! – Devarshi

+0

Вы имели в виду GC? GCC - сборник компиляторов GNU, и какой компилятор вы используете, не имеет значения. GC - сборник мусора, в соответствии с которым отправка сообщений Objective-C 'release' не является строго необходимой (но не делать этого - это хороший способ получить нежные напоминания о том, что« вам нужно освободить эти вещи, если вы не используете GC », когда вы отправьте код на Stack Overflow ☺). –

ответ

1

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

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

+0

можете ли вы предложить какой-то код (как пример) для этого? – Devarshi

+0

http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSMutableAttributedString_Class/ –

+0

Я просмотрел ссылку на класс NSAttributedString, но в ней я не знаю, как использовать NSAttachmentCharacter: ( – Devarshi