2010-06-27 25 views
0

在我的Mac應用程序中,我已經設置了兩個NSSplitViews來創建一個Mail風格的界面(第一個ScrollView用來創建一個垂直分隔符,第二個嵌套在第一個,創建水平分隔器)。爲了說明界面,我創建瞭如下圖:NSSplitView中的NSTableView框架不正確

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

爲了進一步說明的設置,這是我的看法層次的註解卡:

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

我的問題m的意思是,當試圖抓住NSSplitView的B部分和C部分託管的兩個NSTableView的幀時,我會收到相對座標。下面是我使用的代碼:

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值,但我真正想要的是一種簡單的方法來獲取NSTableView相對於父NSSplitView或包含Window的框架。

回答

1

如果拆分視圖,或者通過建立一個得到它出口,你可以使用convertRect:fromView:。或者爲了獲得窗口相對座標,您可以使用convertRectToBase:。請記住,桌子的框架是相對於其超級景觀,所以你會使用類似[[bTableView superView] convertRectToBase: bTableViewFrame]

+0

+1'convertRect:...'方法是這樣做的正確方法 – 2010-06-27 23:11:47

1

你得到這些值的原因是因爲NSTableViews不是NSSplitView的直接子視圖。首先,NSTableView實際上被包含在一個NSScrollView中,根據你的IB屏幕截圖,這又被封閉在另一個普通的NSView中(你在大綱中看到的「Custom View」)。

如果是我,我可以選擇只是爲分割視圖的直接子視圖創建出口的路徑,或者通過在分割視圖上調用-subviews來訪問它們,而不是嘗試向上瀏覽層次結構從桌子上看。在我看來,這兩個選項中的任何一個看起來都不像從桌子上看起來那麼脆弱。

但是,如果你想從表視圖,以拆分視圖的子視圖去,這應該做的伎倆:

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