2011-02-11 4 views
4

내 코코아 응용 프로그램의 기본 메뉴에서 일부 항목의 제목을 변경하려고합니다. IB 내에서뿐만 아니라 내 앱의 applicationDidFinishLaunchingWithOptions : 메소드에서 프로그래밍 방식으로 설정하려고했습니다. 어느 쪽이든, 내 NSMenuItem 객체의 title 속성이 변경됩니다. 하지만 내 변경 사항 중 아무 것도 앱이 실행 중일 때 화면 상단에있는 항목의 실제 제목에 반영되지 않습니다.내 앱의 메인 메뉴에 항목 제목을 설정 했습니까?

아무도 무슨 일이 일어나는지 설명 할 수 있습니까? 어떻게 변경할 수 있습니까?

편집 :

NSApplication *app = [NSApplication sharedApplication]; 
NSMenu *mainMenu = [app mainMenu]; 
NSArray *itemArray = [mainMenu itemArray]; 
NSMenuItem *firstItem = [itemArray objectAtIndex: 0]; 
NSMenu *submenu = [firstItem submenu]; 

내가 원하는 타이틀로 firstItem과 및 하위 메뉴 모두의 제목 속성을 변경 : 데이터 구조는 IB가 설정하는 기본입니다. 그러나 여전히 기본 설정이 나타납니다.

+0

독립 실행 형 'NSMenuItem' 인스턴스 또는 NSMenu 인스턴스입니까? 'NSMenu'는 자체 타이틀을 유지합니다. –

+0

화면 상단의 메뉴 막대에 표시된 응용 프로그램의 주 메뉴는 NSMenu입니다. 표시되는 각 항목 (예 : "응용 프로그램 이름", "파일", "편집", "보기"등 - NSMenuItem입니다. 각 메뉴 항목에는 드롭 다운되는 하위 메뉴 인 NSMenu가 있습니다. 그래서 NSMenu이지만 수직이 아닌 메뉴 막대에 수평으로 표시되는 "특별한 메뉴"입니다. 이제 인터페이스 작성기로 NIB를로드하고 직접 텍스트를 설정할 때 나타나는 시뮬레이트 된 메뉴 막대의 항목을 두 번 클릭 할 수 있어야합니다. 이 방법이 효과가 없습니까? –

+0

Andrew - 텍스트를 바꿀 수는 있지만 여전히 앱에서 동일하게 표시됩니다. –

답변

0

프로젝트의 이름을 변경했습니다. 그래도 극단적 인 것처럼 보입니다. 나는 여전히 덜 극단적 인 해결책에 관심이있을 것이다.

+0

"이름 바꾸기"라고 말하면 방금 파일 이름을 변경하고 해결 한 것입니까, 아니면 새 이름으로 '깨끗한에서'프로젝트를 다시 만들었습니까? –

+0

Xcode의 프로젝트 메뉴에서 이름 바꾸기를 선택합니다. 그것은 많은 것들을 바꿉니다. . . 나는 그들 중 누가 트릭을했는지 조사하지 않았다. –

+0

좋아요, 고마워요. 같은 문제에 부딪히는 다른 누구에게나 유용 할 수 있습니다. –

6

프로젝트 이름을 바꾸는 대신 $ {PRODUCT_NAME}의 application-Info.plist에서 "번들 이름"을 변경하십시오. 당신이 원하는대로. 이 변경 사항은 Main Menu의 Application 메뉴 항목에 반영됩니다.

4

코코아에서 제목이 마음에 들지 않아서 가끔씩 작동하지 않는 경우가 있습니다. 선택한 제목이 현지화 된 앱 이름이지만 현지화되지 않은 앱 이름을 표시하려고 할 때 약간의 묘기가 도움이 될 수 있습니다 ...

NSMenu *menu = [[[NSApp mainMenu] itemAtIndex:0] submenu]; 
NSString *title = @"My app name"; 

// Append some invisible character to title :) 
title = [title stringByAppendingString:@"\x1b"]; 

[menu setTitle:title]; 

네, 미친 짓이지만 결국 그 여분의 캐릭터가 모든 차이를 만들었습니다. (SPACE를 추가 할 수도 있지만 메뉴 항목이 커지면 원하는 항목이 아닐 수도 있습니다.)

OS X 10.9.5에서 테스트되었습니다.

또 다른 한가지 :

당신은 창을 보여 한 후이 모든 작업을 수행해야합니다. 그렇지 않으면 그냥 작동하지 않습니다. 또한 앱 시작시이 절차를 수행 한 다음 나중에 창을 다시 표시하면 나중에 작동하지 않을 수 있습니다.

+1

나는 이것을 (-) 무효로 applicationDidFinishLaunching : (NSNotification *) aNotification 그리고 잘 했어. –

+1

나에게도 효과가있다! 멋진 n 감사합니다 –

+0

이 작동하지만 제목이 굵은 글꼴로 더 이상 있지 않습니다? – basdp