2013-06-22 3 views
1

팝업 버튼 컨트롤 (NSPopupButton)에 라이브 글꼴을 표시 할 수 있는지 궁금합니다. 현재, 다음과 같은 방법으로 사용할 수있는 글꼴 목록이있는 팝업 버튼을로드합니다.라이브 글꼴 (스타일이 지정된 텍스트)이 포함 된 NSPopupButton

NSArray *familyNames = [[NSFontManager sharedFontManager] availableFontFamilies]; 
NSMutableArray *fontarray = [[NSMutableArray alloc] initWithObjects:nil]; 
[fontarray addObject:@"- Select one - "]; 
for (NSString *family in familyNames) { 
    [fontarray addObject:family]; 
} 
[fontmenu1p addItemsWithTitles:fontarray]; 

NSMutableAttributedString을 사용하면 다음과 같이 될지도 모릅니다.

for (NSString *family in familyNames) { 
    NSDictionary *attr1 = [NSDictionary dictionaryWithObjectsAndKeys:[NSFont fontWithName:family size:[NSFont systemFontSize]],NSFontAttributeName,[NSColor blackColor],NSForegroundColorAttributeName,nil]; 
    NSMutableAttributedString *aString = [[NSMutableAttributedString alloc] initWithString:family]; 
    [aString setAttributes:attr1 range:NSMakeRange(0,family.length-1)]; 
    [fontarray addObject:aString]; 
} 
[fontmenu1p addItemsWithTitles:fontarray]; 

한계 초과 오류가 발생합니다. 내 접근 방식이 옳은지 나는 모른다. popupbutton 컨트롤이 스타일있는 텍스트를 지원하는지 여부조차 모르겠습니다.

도움 주셔서 감사합니다.

+0

범위 초과 오류는 어디에서 났습니까? – gaige

+0

나는 이것이 마지막 줄이라고 생각한다. 100 개가 넘는 폰트가 있기 때문에 나는 정확하게 말할 수 없다. 감사. –

+0

내 첫 번째 생각은 fontarray가 비어있을 수 있다고 생각했습니다. 사실, 그렇지 않습니다. 아이템 수를 세면 348이됩니다. 사실 NSLog로 객체 중 하나를 표시하면 다음과 같은 결과를 얻습니다. Arial Blac { NSColor = "NSCalibratedWhiteColorSpace 0 1"; NSFont = "\"Arial-Black 13.00 pt. P [] (0x100528bc0) fobj = 0x101b36150, spc = 4.34 \ ""; 그래서 NSPopupButton 스타일의 텍스트를 표시 할 수 없습니다 같아? VisualBasic/C#을 사용하면됩니다. 그래서 Objective-C로 할 수 있다고 생각했습니다. –

답변

3

우리의 접근 방식이 작동하지 않을 것이라고 나는 생각하지 않았습니다. NSPopUpButton에는 편리한 API가 있습니다. 편리하지만 짧습니다. (일반적으로 팝업 항목은 속성이 부여되지 않고 별도의보기가 없습니다.)

각 항목에 대해 NSMenuItem의 인스턴스를 만들려고합니다. 속성 설정 문자열을 설정할 수있는 설정자 -setAttributedTitle:이 있습니다. 그런 다음 이것을 NSMenuset the menu의 인스턴스에 집계하여 팝업 버튼에 표시해야합니다.

BTW : [aString setAttributes : attr1 범위 : NSMakeRange (0, family.length-1)]; 왜 -1입니까? 길이는 마지막 문자의 인덱스가 아니라 길이입니다. 그리고 마지막 문자의 인덱스가 아닌 길이를 취하는 범위를 설정하려고합니다.

+0

음 ... 나는 처음에는 크기를 가족으로 정했다. 길이. 오류를보고 난 후에 그것을 family.length - 1로 변경했습니다. 확실하지 않았습니다. 그 점을 지적 해 주셔서 감사합니다. –

+0

물론 : 인덱스 문제가 있으며 범위를 줄이기 위해 가장 먼저해야 할 일입니다. 그러나 나는 이것이 문제라고 생각하지 않는다. –