2011-04-23 4 views
5

나는 MSMutableAttributedString displayContent가 있습니다. 콘텐츠의 속성은 문자열 에 따라 다르며 색상 및 글꼴 크기는 문자로 다를 수 있습니다.appendAttributedString : in NSMutableAttributedString

문자열 끝 부분에 새 문자를 추가하고 displayContent에서 마지막 문자의 속성을 선택하려고합니다. 사용자가 제어 할 수 있기 때문에 이러한 속성이 무엇인지 미리 알 수 없습니다. 나는 새로운 캐릭터 (tempAttr)를 추가하면

: 내가 설정하지 않은 새로운 캐릭터의 특성 (에 전체 문자열의 속성을 다시 나타납니다

NSAttributedString * tempAttr = [[NSAttributedString alloc] initWithString:appendage]; 
[displayContent appendAttributedString:tempAttr]; 
때문에 그럴 수 없어 그들이 무엇이 필요한지 아십시오).

tempAttr을 통해 displayContent의 마지막 문자 특성을 가져 오려면 어떻게해야합니까? 감사합니다. .


업데이트. 이 작업은 서투른 방법으로 진행되었습니다. 복사 속성은 디스플레이의 마지막 문자 (displayContent)에서 사전을 한 후 추가되는 새로운 캐릭터로 그 특성을 다시 적용 :

NSMutableDictionary * lastCharAttrs = [NSMutableDictionary dictionaryWithCapacity:5]; 
[lastCharAttrs addEntriesFromDictionary: [displayContent attributesAtIndex:0 
                  effectiveRange:NULL]]; // get style of last letter 
NSMutableAttributedString * tempAttr = [[NSMutableAttributedString alloc] initWithString:newCharacter 
                       attributes:lastCharAttrs]; 

[displayContent appendAttributedString:tempAttr]; // Append to content in the display field 
나는 설정처럼이 일을 더 우아한 방법이 바랐다 것

NSTextField의 속성

답변

15

사고로이 문제에 대한 해결책을 발견 한 다음 본인이 직접 작성한 문제에 대한 해결책을 찾고있는 동안 (문제의 반대편)이 페이지를 찾았습니다.

다음 작업을 수행 할 경우

[[displayContent mutableString] appendString:newCharacter]; 

당신은 추가 newCharacter하게 될 겁니다 및 "뻗어"이전의 속성을 포함 할 수 있습니다. 그러나 나는이 행동이 어디서나 문서화되어있는 것을 발견 할 수 없으므로, 당신은 그것에 지치고 지쳐있을 수도 있습니다.

+0

게시물에 대해 감사드립니다. 내가 코드로 라인을 대체하고 잘 작동했습니다. 고맙습니다. 왜이 작품에 대한 통찰력? mutableString 메소드는 단순히 attributedString의 문자열 내용을 반환합니다. Doc는 속성 자체가 복사되는 것에 대해 언급하지 않습니다. 그래서 appendedString이 올바른 속성을 어디에서 가져 왔는지는 알 수 없습니다. –

+0

나도 몰라. 구현 세부 사항 (예 : 변경 될 수있는 부작용/행동)인지 실제 의도 된 동작인지는 판단 할 수 없습니다. 그러나 "appendAttributedString :"과는 대조적으로 자체 속성이 분명히 있습니다. 기본 문자열을 확장하면 속성이 이어져야한다는 추론을 볼 수 있습니다. 즉, 실제로 어떻게 연결되어 있는지, 나는 전혀 모른다. –

+1

@BenCochran 스트레칭 속성에 대해 특별히 언급 된 것은 없지만 문서는 '수신기가이 문자열로 변경 사항을 추적하고 속성 매핑을 최신 상태로 유지합니다.'라고 말합니다. –