2012-03-31 2 views
7

나는 지난 며칠 동안 내 머리를 아주 단순하게 보이게하는 방법에 대해 고심했다. 나는 주변을 수색했지만 아무 것도 찾을 수 없다.윈도우 제목 표시 줄에 버튼 추가

Mac에서 열리는 모든 창에 버튼을 추가하고 싶습니다 ("X" "-" "+"버튼 맞은 편 오른쪽에 있습니다). 단추를 추가 할 영역을 제목 표시 줄이라고합니다. 물론 확실하지는 않습니다.

인터페이스 빌더에서이 작업을 수행하는 방법을 찾지 못하는 것 같습니다. 그러나 내가 한 경우에도 버튼이 mac에서 열리는 모든 창에 표시되기를 원합니다 (분명히 사용자가이 프로그램을 설치하면 분명히).

나는 이것이 본질적으로 OS의 UI에 "꽂혀있다"는 것을 이해하지만, 나는 다른 응용 프로그램이 이것을하는 것을 보았다. 그것이 나를 할 수 있다고 생각하게 만든다.

이 포인터를 찾아 보니 어딘가에서 코드 스 니펫과 일반적인 조언을 읽을 수 있습니다.

Screenshot

+0

어디서나 추가 할 수 있습니다. Mac OS X 10.7 이상을 사용하는 사용자는 오른쪽에 "전체 화면"버튼이 있습니다. 버튼이 왼쪽으로 조금 이동되었는지 확인하십시오. –

+0

유용한 관련 질문 : http : // stackoverflow.com/questions/3833241/additional-secondary-text-to-window-title-bar-in-cocoa –

답변

6

이 정말 두 부분으로 질문 : 여기

내가 버튼을 원하는 스크린 샷입니다. 거기 버튼을 얻는 방법에 관해서는, 나는 (제목 표시 줄, 즉) 기존의 윈도우 버튼과 수퍼를 얻을 수 -[NSWindow standardWindowButton:]을 사용하는 것이 좋습니다 것 :

NSButton *closeButton = [window standardWindowButton:NSWindowCloseButton]; // Get the existing close button of the window. Check documentation for the other window buttons. 
NSView *titleBarView = closeButton.superview; // Get the view that encloses that standard window buttons. 
NSButton *myButton = …; // Create custom button to be added to the title bar. 
myButton.frame = …; // Set the appropriate frame for your button. Use titleBarView.bounds to determine the bounding rect of the view that encloses the standard window buttons. 
[titleBarView addSubview:myButton]; // Add the custom button to the title bar. 

플러깅-에서이 같이 할 아마도 가장 쉬운 방법입니다 SIMBL 플러그인.

+0

설치된 모든 프로그램에서이 기능을 사용할 수 있습니까? – JoePasq

+0

NSWindowCloseButton과 비슷한 것을 사용하면 표준 단추를 표시할지 여부를 결정할 수 있습니다. API는 여기서는별로 도움이되지 않습니다. 메소드가 반환 할 내용이나 다른 것을 알려주지 않습니다. 내 단추를 배치하기 위해 standardWindowButton :을 어떻게 사용할지 모르겠다. 기존 단추를 편집하는 것 같다. – Timsk

+0

API는 요청 된 버튼을 반환합니다. 당신은 그것을 숨기기 위해 사용할 수 있지만, 그렇게 할 필요는 없습니다. 이 예에서, 기존 윈도우 버튼은 표준 윈도우 버튼 (즉, 제목 막대보기)을 둘러싸는 뷰를 찾는 데 사용됩니다. 예제를 확장하고 주석을 추가했습니다. 나는 당신이 의미하는 바가 "그 방법이 무엇을 돌려 줄지 또는 무엇이든지 말해주지 않는다"는 것을 확신하지 못합니다. NSWindow 클래스 참조는 [분명히 그렇게] (http://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSWindow_Class/Reference/Reference.html#//apple_ref/occ/instm/ NSWindow/standardWindowButton :). – gcbrueckmann

7

OS X 10.10 (Yosemite) 이상에서 제목 표시 줄 버튼을 추가하는 공식적인 방법은 NSTitlebarAccessoryViewController을 만들고 -[NSWindow addTitlebarAccessoryViewController]을 사용하여 창에 추가하는 것입니다.

예를 들어, 내가 제목 표시 줄 액세서리보기가있는 윈도우 있습니다

demo window title bar

이 설정하려면를, 내 스토리 보드에 윈도우 컨트롤러 장면 독립 뷰를 추가하여 시작했다. (당신은 스토리 보드를 사용할 필요가 없습니다 그러나 나는이 프로젝트에했다.)

accessory view

내 액세서리보기는 NSButton 서브 뷰를 가진 NSView입니다. 단추 제목은 글꼴 Awesome을 사용하여 압핀을 표시합니다. 내 창 컨트롤러의 windowDidLoad, 내가의 NSTitlebarAccessoryViewController을 만들 설정된 속성에서

outlet connection

그런 다음을 추가 :

나는 나의 NSWindowController 서브 클래스에 콘센트 (영리 accessoryView 이름)으로 액세서리보기 연결 윈도우에 :

@IBOutlet var accessoryView: NSView! 
var accessoryViewController: NSTitlebarAccessoryViewController? 

override func windowDidLoad() { 
    super.windowDidLoad() 
    createAccessoryViewControllerIfNeeded() 
} 

fileprivate func createAccessoryViewControllerIfNeeded() { 
    guard self.accessoryViewController == nil else { return } 
    let accessoryViewController = NSTitlebarAccessoryViewController() 
    self.accessoryViewController = accessoryViewController 
    accessoryViewController.view = accessoryView 
    accessoryViewController.layoutAttribute = .right 
    self.window?.addTitlebarAccessoryViewController(accessoryViewController) 
} 
관련 문제