1

Я создаю NSMutableAttributedString с выравниванием следующим образом:Как получить NSParagraphStyleAttributeName из NSMutableAttributeString?

UIFont * font = [UIFont systemFontOfSize:[UIFont labelFontSize]]; 
/// Make a copy of the default paragraph style 
NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; 
/// Set line break mode 
paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; 
/// Set text alignment 
paragraphStyle.alignment = alignmentForString(textString) ;//NSTextAlignmentLeft;//NSTextAlignmentRight;// NSTextAlignmentNatural;// NSTextAlignmentLeft; 

NSDictionary *messageDrawRectAttributesDictionary = @{ 
         NSFontAttributeName: font, 
         NSParagraphStyleAttributeName: paragraphStyle, 
         NSForegroundColorAttributeName:[UIColor blackColor] 
         }; 

NSMutableAttributedString * mutalbleAttributedString = [[NSMutableAttributedString alloc] initWithString:textString attributes:messageDrawRectAttributesDictionary]; 

Я хочу знать (для последующего использования в приложении) как получить то, что выравнивание я поставил в этой строке.

Я попробовал этот код, без точного понимания того, что я делаю:

NSRange range = NSMakeRange(0,mutalbleAttributedString.length-1); 
NSDictionary * paraDic =[mutalbleAttributedString attribute:NSParagraphStyleAttributeName atIndex:0 longestEffectiveRange:&range inRange:range]; 

Теперь я ищу много примеров кода, и я читать документы Apple. Но не повезло. Я получаю пустой словарь.

Единственная помощь, в которой я нуждаюсь, это то, что кто-то может просто написать правильный код, который вернет мне данные выравнивания.

ответ

2

Когда вы вызываете attribute:atIndex:longestEffectiveRange:inRange:, возвращаемое значение является значением запрашиваемого атрибута, а не словаря. Кроме того, не переходите в range для обоих параметров диапазона.

Ваш код должен быть что-то вроде этого:

NSRange range = NSMakeRange(0, mutalbleAttributedString.length); 
NSParagraphStyle *paraStyle = [mutalbleAttributedString attribute:NSParagraphStyleAttributeName atIndex:0 longestEffectiveRange:NULL inRange:range]; 
NSTextAlignment alignment = paraStyle.alignment; 

Обратите внимание на следующие изменения:

  • Надлежащий возвращаемое значение атрибута запрашивается
  • Настройки правильная длина range
  • Передача NULL на longestEffectiveRange:, так как вам все равно.
+0

большое! это работает! благодаря ! надеюсь эта помощь для других тоже !! – user1105951

0

Вы можете получить выравнивание с NSMutableAttributedString, как это:

NSRange range = NSMakeRange(0, mutableAttributedString.length); 
NSDictionary *attributes = [mutableAttributedString attributesAtIndex:0 effectiveRange:&range]; 
NSMutableParagraphStyle *paragraphStyle = attributes[NSParagraphStyleAttributeName]; 
NSTextAlignment alignment = paragraphStyle.alignment; 
+1

1. 'range' неверен. 2. Не переустанавливайте ключ для получения атрибута. Используйте правильную константу, предоставляемую API. – rmaddy

+0

Спасибо за ваш комментарий! Вы правы, я отредактировал свой ответ. – joern

Смежные вопросы