2011-12-30 4 views
6

IB에 컨트롤러에 바인딩 된 Label (NSTextField)이 있습니다. 컨트롤러는 awakeFromNIB에서 레이블의 attributedStringValue에 유색 텍스트와 링크 또는 두 개를 포함하도록 설정합니다.렌더링시 NSTextField의 속성 문자열이 지연됩니다.

레이블을 볼 때 올바른 문자열 값이 포함되어 있지만 일부 형식은 손실됩니다. 레이블을 클릭하고 올바른 형식을 포함하도록 업데이트 할 때까지 손실됩니다.

내가 값을 설정하려면이 코드를 사용하고 있습니다 :

[self.testTextField setAllowsEditingTextAttributes:YES]; 
[self.testTextField setSelectable:YES]; 
NSMutableAttributedString *linkString = [[NSMutableAttributedString alloc] initWithString:@"hit this "]; 

[linkString beginEditing]; 

NSMutableAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString:@"link"]; 
NSRange range = NSMakeRange(0, [attrString length]); 

[attrString addAttribute:NSLinkAttributeName value:[[NSURL URLWithString:@"http://google.com"] absoluteString] range:range]; 
[attrString addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:NSUnderlinePatternDot] range:range]; 
[attrString addAttribute:NSForegroundColorAttributeName value:[NSColor blackColor] range:range]; 
[linkString appendAttributedString:attrString]; 

[linkString appendAttributedString:[[NSAttributedString alloc] initWithString:@" to search"]]; 

[linkString addAttribute:NSForegroundColorAttributeName value:[NSColor redColor] range:NSMakeRange(0, [linkString length])]; 

[linkString endEditing]; 

[self.testTextField setAttributedStringValue:linkString]; 

이 예제에 기반을, 당신은 빨간색과 기본 라벨 글꼴 색 문자열을 볼 수 있습니다. 그런 다음 레이블을 클릭하면 글꼴의 크기와면이 바뀌고 링크가 마술처럼 렌더링됩니다.

문자열을 올바르게 렌더링하는 방법에 대한 아이디어가 있습니까?

+0

: 난 내 텍스트 필드에 대한 IB에서 설정과 같이 그 속성을 설정 한 글꼴을 일치 NSFont 객체를 생성 끈. 이 메소드는 문자열이 변경 사항을 모니터링 할 때만 사용됩니다 (예 : NSTextStorage의 경우 'NSTextView'). –

+0

또한 텍스트 필드가 컨트롤러에 "바인딩"되어 있다고 가정합니다. "bound"라는 단어를 사용한다는 것은 코코아 바인딩을 사용하고 있음을 의미하지만 텍스트 필드의 값을 프로그래밍 방식으로 설정하는 것처럼 보이지 않는 것처럼 보입니다. 텍스트 필드의 'attributedStringValue' 바인딩은 실제로 아무것도 바인딩되어 있습니까? –

+0

@RobKeniger '바인딩 된'IBOutlet입니다 (그게 옳은 용어입니까?) – d2kagw

답변

0

내가 아는 한, 그것은 단지 정상적인 AppKit 별난 일입니다.

DSClickableURLTextField

또한 옵션이 있습니다 : 내가 링크와 같은 텍스트 필드를 렌더링하기 위해이 사용자 정의 클래스를 사용하여 성공을 거두었습니다

, 그냥 정상처럼 그 때문 문자열 값 인터페이스 빌더에 추가하고 설정 NSButton을 사용하는 것이 더 고통 스럽지만 추가 작업없이 손 모양의 커서를 얻지는 못합니다.

4

동일한 문제가 발생했습니다. 내가 발견 한 솔루션은 명시 적으로 특성 문자열에 NSFontAttributeName을 설정하는 것이 었습니다. 당신이 기인 구성 할 때 당신은 endEditing```전화 beginEditing`하고 할 필요가 없습니다

NSFont *font = [NSFont fontWithName:@"Lucida Grande" size:(CGFloat)13.0]; 
[attrString addAttribute:NSFontAttributeName value:font range:range]; 
관련 문제