0

私の Mac アプリ内で、2 つの NSSplitView をセットアップしてメール スタイルのインターフェイスを作成しました (最初の ScrollView を使用して垂直セパレータを作成し、2 番目を最初のスクロール ビュー内にネストして水平セパレータを作成します)。インターフェイスを説明するために、次の図を作成しました。

代替テキスト http://img96.imageshack.us/img96/1091/setupn.png

セットアップをさらに説明するために、ビュー階層の注釈付きスナップを次に示します。

代替テキスト http://img714.imageshack.us/img714/8153/yayaj.png

私が抱えている問題は、NSSplitView の部分 B と C 内でホストされている 2 つの 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 値を自分で作成することもできますが、私が本当に探しているのは、親の NSSplitView またはそれを含む Window に関連する NSTableViews のフレームを取得する簡単な方法です。

4

2 に答える 2

1

これらの値を取得する理由は、NSTableViews が NSSplitView の直接のサブビューではないためです。まず、NSTableView は実際には NSScrollView 内に含まれており、IB のスクリーンショットによると、別のプレーンな NSView (アウトラインに表示される「カスタム ビュー」) 内に含まれています。

私だったら、分割ビューの直接のサブビューへのアウトレットを作成するか、テーブル ビューから階層を上に移動しようとするのではなく、分割ビューで -subviews を呼び出すだけでアクセスします。 . 私の意見では、これらのオプションのいずれも、テーブルビューから上に向かって作業するよりも脆弱ではないようです。

ただし、テーブル ビューから分割ビューのサブビューに移動する場合は、次のようにします。

NSRect aTableViewFrame = [[[aTableView enclosingScrollView] superview] frame];
于 2010-06-27T22:30:21.560 に答える
1

分割ビューがある場合、またはアウトレットを設定して取得する場合は、 を使用できますconvertRect:fromView:。または、ウィンドウ相対座標を取得するには、 を使用できますconvertRectToBase:。テーブルのフレームはそのスーパービューに対して相対的であるため、 のようなものを使用することに注意してください[[bTableView superView] convertRectToBase: bTableViewFrame]

于 2010-06-27T23:02:40.160 に答える