さまざまなハンドルを表示するカスタムコントロールで作業しています。選択したハンドルに、他のハンドルよりもZインデックスおろし金があることを確認したいと思います。
ビューの順序を入れ替える方法はありますか?私はこの関数を見つけましsortSubviewsUsingFunction:context:
たが、これが正しい解決策であるかどうか理解できません。
さまざまなハンドルを表示するカスタムコントロールで作業しています。選択したハンドルに、他のハンドルよりもZインデックスおろし金があることを確認したいと思います。
ビューの順序を入れ替える方法はありますか?私はこの関数を見つけましsortSubviewsUsingFunction:context:
たが、これが正しい解決策であるかどうか理解できません。
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;
}
}
}
はい、sortSubviewsUsingFunction:context:
やりたいことはできますが、ある特定のビューを (順不同の) 他のビューの上に置くことだけが必要な場合は、やり過ぎかもしれません。その場合は、 のbringSubviewToFront:
方法を検討する必要がありますUIView
。そうすれば、ハンドルを表示するために IBAction で次のようなことができます。
[self.view bringSubviewToFront: handle];
ハンドルがUIViewから継承/継承するオブジェクトであると仮定します。これが探しているものではない場合は、必ず を使用してsortSubviewsUsingFunction:context:
ください。その場合、各サブビューの個々のタグ プロパティを変更し、それに応じて並べ替える必要があります。
あなたの質問から私が理解しているように、あなたが見るすべてをループしてそれらを配列に追加することができます。
[self.view insertSubview:view1 atIndex:2]
[self.view insertSubview:view1 aboveSubview:0]
[self.view insertSubview:view1 belowSubview:1]
その後、必要に応じて順序を入れ替えることができます..