私は別のハンドルを提示するカスタムコントロールで作業しています。私は、選択されたハンドルがZ-インデックスを持っていて、他のハンドルがハンドルしていることを確認したい。NSViewサブビューの順序を変更する
ビューの順序を入れ替える方法はありますか? この機能はsortSubviewsUsingFunction:context:
ですが、これが正しい解決策であるかどうかはわかりません。
私は別のハンドルを提示するカスタムコントロールで作業しています。私は、選択されたハンドルがZ-インデックスを持っていて、他のハンドルがハンドルしていることを確認したい。NSViewサブビューの順序を変更する
ビューの順序を入れ替える方法はありますか? この機能はsortSubviewsUsingFunction:context:
ですが、これが正しい解決策であるかどうかはわかりません。
私はあなたがあなたが見るすべてをループして配列に追加することができますが、あなたはそれらをインデックスに追加するオプションがあることを理解しています。あなたは以下の機能を持っています。
[self.view insertSubview:view1 atIndex:2]
[self.view insertSubview:view1 aboveSubview:0]
[self.view insertSubview:view1 belowSubview:1]
あなたがはい、sortSubviewsUsingFunction:context:
があなたの探しているものを行うことができます..それはあなたが必要と順序だ
OPのように見える 'NSView'sこれは' UIView'sのためだけです –
を入れ替えることができますがしたいすべてが特定の一つのためであれば、しかし、それはやり過ぎかもしれません(順序のない)他人の上に座るように見える。その場合はUIView
のbringSubviewToFront:
メソッドを調べる必要があります。そうすれば、あなたはハンドルを育てるためにあなたのIBActionでこのような何かを行うことができます:そのハンドルを想定し
[self.view bringSubviewToFront: handle];
は/ UIViewのを継承しているオブジェクトです。これがあなたが探しているものでない場合は、是非、sortSubviewsUsingFunction:context:
に行ってください。その場合は、各サブビューの個々のタグプロパティを変更し、それに応じてソートする必要があります。
私は働いていますiOS以外のOSXでも同様の機能を検索できるので+1します。 – MatterGoal
ああ、その場合、これはちょっとハッキリしているようですが、あなたはいつも以下のカテゴリを追加することができます:http://stackoverflow.com/questions/4236304/os-x-version-of-bringsubviewtofront –
ありがとう、私は、パフォーマンスの面でこのソリューションが優れているかどうかを理解する必要があります。sortSubviewsUsingFunction – MatterGoal
かなりシンプルですが、2つのサブビューを比較して並べ替える機能を使用することができます。ここでは、ビューのタグに基づいた簡単な解決策があります。
[mainView sortSubviewsUsingFunction:(NSComparisonResult (*)(id, id, void*))compareViews context:nil];
...
NSComparisonResult compareViews(id firstView, id secondView, void *context) {
int firstTag = [firstView tag];
int secondTag = [secondView tag];
if (firstTag == secondTag) {
return NSOrderedSame;
} else {
if (firstTag < secondTag) {
return NSOrderedAscending;
} else {
return NSOrderedDescending;
}
}
}
申し訳ありませんが、compareViews関数のプロトタイプを理解できません。 Objective-cとCの組み合わせを使用していますか? – MatterGoal
OSX 10.10以降、Cocoaは新しいAPIを導入しました。
これはiOSに似ていますので、下または上に表示する別のビューを渡すことができます。
[self.view addSubview:myView positioned:NSWindowBelow relativeTo:myViewInBackground];
チェックアウトdocumentation;私の経験ではNSWindowBelow
とNSWindowAbove
が逆に見えました。
あなたはすべてのサブビューをループして取得することができ、それらを取得すると、ビューにすべてのインデックスを挿入することができます... –