2012-11-19 2 views
4

내 NSMenu에서 내 NSMenuItems의 글꼴/스타일을 설정하는 방법을 알아낼 수 없습니다. NSMenu에서 setFont 메서드를 시도했지만 메뉴 항목에 영향을 미치지 않는 것 같습니다. NSMenuItem에는 setFont 메서드가없는 것 같습니다. 나는 그들에게 모두 동일한 서체/스타일을 부여하고 싶습니다. 어딘가에 설정할 수있는 속성이 하나만 있기를 바랍니다.NSMenu/NSMenuItems의 글꼴을 설정하는 방법은 무엇입니까?

- (void)setAttributedTitle:(NSAttributedString *)string; 

예제 코드 :

답변

7

그들은, 기인 제목을 가질 수있다 속성이 모두 포함 된 문자열 (글꼴 포함) :

NSMutableAttributedString* str =[[NSMutableAttributedString alloc]initWithString: @"Title"]; 
[str setAttributes: @{ NSFontAttributeName : [NSFont fontWithName: @"myFont" size: 12.0] } range: NSMakeRange(0, [str length])]; 
[label setAttributedString: str]; 
+0

제목이 가장 좋은 방법이라고 생각하십니까? 그런 다음 메뉴를 반복하고 각 항목을 변경해야하며 새 항목을 추가 할 때마다 속성이 설정된 제목을 설정해야합니다. – JPC

+0

속성을 사용하여 복잡한 작업을 수행해야하는 경우 문자열 값을 설정하는 것 외에도 font.Subclass NSTextField를 설정하는 개인 설정기를 작성할 수 있습니다. –

8

NSMenuItem는 제목으로 기인 문자열에 대한 지원을하고있다

NSMenuItem *menuItem = [[NSMenuItem alloc] initWithTitle:@"Hi, how are you?" action:nil keyEquivalent:@""]; 
NSDictionary *attributes = @{ 
           NSFontAttributeName: [NSFont fontWithName:@"Comic Sans MS" size:19.0], 
           NSForegroundColorAttributeName: [NSColor greenColor] 
          }; 
NSAttributedString *attributedTitle = [[NSAttributedString alloc] initWithString:[menuItem title] attributes:attributes]; 
[menuItem setAttributedTitle:attributedTitle]; 

문서 : 당신이 때문 설정할 수 있도록 https://developer.apple.com/library/mac/#documentation/cocoa/reference/applicationkit/classes/nsmenuitem_class/reference/reference.html

+0

타이틀이 할 수있는 최선의 방법을 기인하고 있는가? 그런 다음 메뉴를 반복하고 각 항목을 변경해야하며 새 항목을 추가 할 때마다 속성이 설정된 제목을 설정해야합니다. 나는 그것을 한 번 설정하는 방법을 희망했다. – JPC

+0

http://stackoverflow.com/questions/32426341/using-the-fontwithsize-api-with-san-francisco 예제와 함께 이것을 활용하는 방법은 무엇입니까? –

1

실제로 [NSMenu setFont :]는 모든 메뉴 항목 하위 메뉴 (마지막 메뉴 항목이 자신의 글꼴을 가지고 있지 않은 경우)에서 작동합니다. 어쩌면 메뉴 글꼴을 설정하기 전에 귀속 된 제목을 설정 했습니까? 메뉴 항목을 반복하는 자체 프로 시저를 작성한 후에이를 실현했습니다. NSFont에서

@implementation NSMenu (MenuAdditions) 

- (void) changeMenuFont:(NSFont*)aFont 
{ 
    for (NSMenuItem* anItem in self.itemArray) 
    { 
     NSDictionary *attrsDictionary = [NSDictionary dictionaryWithObject:aFont forKey:NSFontAttributeName]; 
     anItem.attributedTitle = [[[NSAttributedString alloc] initWithString:anItem.title attributes:attrsDictionary] autorelease]; 

     if (anItem.submenu) 
      [anItem.submenu changeMenuFont:aFont]; 
    } 
} 

@end 
1

+ menuBarFontOfSize: 여기에 당신의 친구입니다 : 당신이 (모든 항목 즉, 변화 글꼴, 또는 다른 항목에 맞게 사용자 정의) 일부 사용자 지정 처리를해야 할 경우에는

여기에 간단한 반복하는 코드입니다.

  • 글꼴 집합을 변경하지 않으려면 [NSFont menuBarFontOfSize:12]을 사용하여 기본 글꼴을 가져 와서 새 크기를 설정해야합니다.
  • 색상 만 변경하는 경우에도 [NSFont menuBarFontOfSize:0]을 수행하여 기본 글꼴 크기를 다시 설정해야합니다.

는 너무에만 NSMenuItem 색상을 변경 :

NSDictionary *attributes = @{ 
           NSFontAttributeName: [NSFont menuBarFontOfSize:0], 
           NSForegroundColorAttributeName: [NSColor greenColor] 
          }; 

NSAttributedString *attributedTitle = [[NSAttributedString alloc] initWithString:[menuItem title] attributes:attributes]; 
[menuItem setAttributedTitle:attributedTitle]; 
관련 문제