2010-06-27 4 views
0

내 Mac 앱 내에서 메일 스타일 인터페이스를 만들기 위해 두 개의 NSSplitViews를 설정했습니다. 첫 번째 ScrollView는 세로 구분 기호를 만들고 두 번째는 첫 번째로 중첩되어 가로를 만듭니다 분리 기호). 인터페이스를 설명하기 위해, 나는 다음과 같은 다이어그램 만들었습니다NSSplitView 내 잘못된 NSTableView 프레임

alt text http://img714.imageshack.us/img714/8153/yayaj.png

나 '문제 :

alt text http://img96.imageshack.us/img96/1091/setupn.png

추가 설정을 설명하기를, 여기 내 뷰 계층의 주석 스냅입니다 두 개의 NSTableView가 NSSplitView의 B 부분과 C 내에서 호스팅되는 프레임을 잡으려고 할 때 상대 좌표를받습니다. 여기

NSRect aTableViewFrame = [aTableView frame]; 
NSRect bTableViewFrame = [bTableView frame]; 
NSLog(@"%@ %@", NSStringFromRect(aTableViewFrame), NSStringFromRect(aTableViewFrame)); 

내가 보는 출력 것 : 여기 내가 사용하고 코드의

{{0, 0}, {760, 143}} {{0, 0}, {760, 392}} 

반환 된 NSRect 값에서 볼 수 있듯이, 나는 NSTableView는의 정확한 폭과 높이를 제공하고 있습니다 ,하지만 내가 실제로 한 것은 부모 NSSplitView에 대한 상대적인 위치입니다. 물론, (다수의) IBOutlets를 사용하고 올바른 rect 값을 직접 구성 할 수는 있지만, 실제로 찾고있는 것은 부모 NSSplitView 또는 포함하는 Window에 상대적으로 NSTableViews의 프레임을 잡는 쉬운 방법입니다.

답변

1

, 또는습니다 설정하여 그것을 얻을 : 당신이 분할 뷰의 서브 뷰에 테이블보기에서 이동하려는 경우

그러나,이 트릭을 할해야 콘센트라면 convertRect:fromView:을 사용할 수 있습니다. 또는 윈도우 상대 좌표를 얻으려면 convertRectToBase:을 사용할 수 있습니다. 테이블의 프레임은 수퍼 뷰와 관련이 있으므로, [[bTableView superView] convertRectToBase: bTableViewFrame]과 같은 것을 사용합니다.

+0

+1 'convertRect : ...'메소드가이 작업을 수행하는 적절한 방법입니다. –

1

NSTableViews가 NSSplitView의 직접 하위보기가 아니기 때문에 이러한 값을 얻는 이유가 있습니다. 우선, NSTableView는 실제로 NSScrollView 내에 포함되어 있으며, IB 스크린 샷에 따르면, 이는 다시 다른 일반 NSView (개요에 표시된 "사용자 정의보기") 내에 포함됩니다.

나인 경우 분할 뷰의 직접 하위 뷰로 콘센트를 만들거나 분할 뷰에서 하위 뷰를 호출하여 액세스 할 수 있습니다. 테이블보기에서. 이러한 옵션 중 하나는 테이블 뷰에서 위쪽으로 작업하는 것보다 덜 허약 해 보인다. 스플릿 뷰가있는 경우

NSRect aTableViewFrame = [[[aTableView enclosingScrollView] superview] frame];