2012-08-02 6 views
3

텍스트보기에 "검사자 막대"를 사용하면 여러 가지 서식 지정 단추가있는 화면 맨 위에 막대가 나타나기 쉽습니다. (필자가 스크롤 뷰에서 텍스트 뷰를 선택하고 스크롤 뷰 자체를 선택하지 않도록 할 때까지 약간의 혼란이 있었지만). 프로그래밍 방식으로 [textView setUsesInspectorBar : YES]를 사용하거나 Attributes Inspector로 이동하여 "Usees"섹션의 "Inspector Bar"상자를 확인할 수 있습니다.NSTextView의 위치 지정 막대

제 질문은 어떻게 검사기 막대를 추가로 제어 할 수 있습니까? XCode 문서 또는 온라인에서 정보를 찾는 데 문제가 있습니다. 나는 그것을 화면의 다른 장소에 배치 할 수 있기를 원합니다. 술집에있는 특정 컨트롤을 선택하고 선택할 수 있다는 점도 좋습니다.

답변

3

답은 사용자가 검사기 바를 더 이상 제어 할 수 없다는 것입니다. 문서에는 아무 것도 없기 때문에 아무것도 없습니다. 애플이 말하는, 그것을 사용하거나 사용하지 마십시오.

그러나 조금만 살펴보면 검사기 막대가 매우 흥미로운 컨트롤이라는 것을 알 수 있습니다. 그것은 텍스트보기의 일부로 표시되지 않고 "창보기"자체에 포함됩니다 (개인적으로). "창보기"라고 말하면 콘텐츠보기의 수퍼 뷰를 의미합니다.

는 당신이 "창보기"의 서브 뷰를 나열하는 경우 :

NSLog(@"%@", [self.testTextView.window.contentView superview].subviews); 

당신이와 끝까지 : 당신이 볼 수 있듯이

2012-08-02 15:59:30.145 Example[16702:303] (
    "<_NSThemeCloseWidget: 0x100523dc0>", // the close button 
    "<_NSThemeWidget: 0x100525ce0>", // the minimize button? 
    "<_NSThemeWidget: 0x100524e90>", // the maximize button? 
    "<NSView: 0x100512ad0>", // the content view 
    "<__NSInspectorBarView: 0x100529d50>", // the inspector view 
    "(<NSToolbarView: 0x10054e650>: FD2E0533-AB18-4E7E-905A-AC816CB80A26)" // the toolbar 
) 

, AppKit는 같은 레벨로의 관리자 줄을 넣습니다 다른 최상위 창 컨트롤. 이제는 비공개 API의 영역에 들어서지만 "창보기"로 간단하게 조작하면 어떤 앱도 거부되지 않습니다.


당신은 여기에서 __NSInspectorBarView에 대한 참조를 얻을 수을 시도 할 수 있습니다. 그것은 바로 콘텐츠보기 후 항상 서브 뷰는 것 같다, 그래서 이런 일이 작동 :

NSArray *topLevelViews = [self.testTextView.window.contentView superview].subviews; 
NSUInteger indexOfContentView = [topLevelViews indexOfObject:self.testTextView.window.contentView]; 
if (indexOfContentView + 1 < topLevelViews.count) { 
    NSView *inspectorBar = [topLevelViews objectAtIndex:indexOfContentView + 1]; 
    NSLog(@"%@", inspectorBar); 
} 
NSLog(@"%@", topLevelViews); 

을이 바로 애플이 최상위 뷰의 순서를 변경하는 경우 나누기 때문에, 좋은 생각되지 않을 수도 있습니다 생산을위한 신청서. 또 다른 아이디어는 다음과 같습니다 NSClassFromString()의 사용하지만, 앱 스토어 리뷰 가이드 라인을 통과 할 경우 다시 한번, 그것은 개인의 API에 의존 이후 내가 모르는

NSView *inspectorBarView = nil; 
for (NSView *topLevelView in topLevelViews) { 
    if ([topLevelView isKindOfClass:NSClassFromString(@"__NSInspectorBarView")]) { 
     inspectorBarView = topLevelView; 
    } 
} 
NSLog(@"%@", inspectorBarView); 

.


즉, 일단 검사기 막대보기에 대한 참조를 얻으면 문제가 너무 잘 작동하지 않습니다.당신은 아래에 그 위치를 다시 시도 할 수 있습니다 :

if (inspectorBarView) { 
    NSRect newFrame = inspectorBarView.frame; 
    newFrame.origin = NSZeroPoint; 
    [inspectorBarView setAutoresizingMask:NSViewMaxYMargin | NSViewMaxXMargin]; 
    [inspectorBarView setFrame:newFrame]; 
} 

그러나 당신이 misdrawn 도구 모음으로 끝날, 그래서 더 많은 작업이 필요가있을 것입니다 :

enter image description here

내 아이디어가 변화를 시도하는 것 내용보기의 높이가 회색 왼쪽 영역을 덮습니다 (창의 크기가 조정될 때마다 수행해야 할 것입니다. 자동 크기 조정 마스크로 수정하면 더 쉽게 작업 할 수 있습니다). 그리고 사용자 정의 도구 모음의 하단에 사용자 정의 배경을 그립니다 .

편집

아, 그리고 당신도 이것에 대한 기능 요청을 제출해야한다. bugreport.apple.com

0

이 물건을 배치하는 데는 아무 것도 할 수 없습니다. 분명히 @Vervious로 표시된 손상은 NSToolBar가없는 경우에만 이지만 인 경우에만 발생합니다. 아시다시피,이 inspectorBar는 슬프게도 주로 개인적이며 주로 (공개적으로) 문서화되지 않은 멋진 도구입니다. 그리고 이것은 NSToolBar visible ... go figure가있는 창에서 사용하기위한 것입니다.

당신은 도구 모음 도구 모음과 After you have a toolbar added to your view

여전히보기에 추가하지만, 숨겨진, 및 관리자 바 (보기 메뉴하거나 호출하는 방법을 통해 같이 멋진 후 어떤 toggleToolBarShown :이며 NSResponder 친숙한 메시지입니다. Still with a toolbar but hidden, and inspector bar is cool

이렇게 많은 것을 할 수는 없습니다. 디자인이 제대로 문서화되어 있지 않습니다. NSToolbar가 움직이는 곳에서 가상 액세서리 뷰바로 의도 한대로 작동합니다. (조절할 수도 없습니다)

1

이것은 4 년 늦었지 만, 인터넷에서 누군가가이 혜택을 누릴 수 있다고 생각합니다. 나는 이것을 이해하려고 너무 오랫동안 보냈다.

다른 검사자가 지적한 것처럼 검사기 막대 클래스는 개인 클래스 (__NSInspectorBarView) 인 것 같습니다. 따라서 수정하지 않는 것이 좋습니다.

그럼에도 불구하고! 호기심이 알고 있어야합니다. 검사관은이 게시물 (2016 년 4 월) 당시 창 액세서리 바에 삽입됩니다. titlebarAccessoryViewControllers[]이라는 NSWindow의 배열 속성을 사용하여 OS X 10.10에서 액세서리보기 목록을 가져올 수 있습니다.

미리보기 창에 다른 액세서리보기를 넣지 않았다는 가정하에 을 실행하는 Swift 2.0 코드가 있습니다..

if window.titlebarAccessoryViewControllers.count > 0 { 
     let textViewInspectorBar = self.titlebarAccessoryViewControllers[0].view 
     let inspectorBarHeight: CGFloat = textViewInspectorBar!.frame.height // 26.0 pt 
    } 

그것은 액세서리 전망 가 전체 화면 모드 응용에서 다르게 처리되는 것을 주목할 필요가 : https://developer.apple.com/library/mac/documentation/General/Conceptual/MOSXAppProgrammingGuide/FullScreenApp/FullScreenApp.html

나는 개인적으로 그들이 있도록 설계 뷰의 특별한 종류를있는 그대로, 액세서리보기를 이동하지 것이다 (내가 읽은 것을 완전히 이해한다면).

NSTitlebarAccessoryViewController 참조 : https://developer.apple.com/library/mac/documentation/AppKit/Reference/NSTitlebarAccessoryViewController_Class/

+1

그것은 다른 프로그래머를위한 유용한 정보를 제공 할 수 결코 너무 늦은! :) –