7

さまざまなハンドルを表示するカスタムコントロールで作業しています。選択したハンドルに、他のハンドルよりもZインデックスおろし金があることを確認したいと思います。

ビューの順序を入れ替える方法はありますか?私はこの関数を見つけましsortSubviewsUsingFunction:context:たが、これが正しい解決策であるかどうか理解できません。

4

4 に答える 4

6

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;
        }
    }
}
于 2012-07-03T13:20:10.780 に答える
-4

はい、sortSubviewsUsingFunction:context:やりたいことはできますが、ある特定のビューを (順不同の) 他のビューの上に置くことだけが必要な場合は、やり過ぎかもしれません。その場合は、 のbringSubviewToFront:方法を検討する必要がありますUIView。そうすれば、ハンドルを表示するために IBAction で次のようなことができます。

[self.view bringSubviewToFront: handle];

ハンドルがUIViewから継承/継承するオブジェクトであると仮定します。これが探しているものではない場合は、必ず を使用してsortSubviewsUsingFunction:context:ください。その場合、各サブビューの個々のタグ プロパティを変更し、それに応じて並べ替える必要があります。

于 2012-07-03T13:19:21.467 に答える
-6

あなたの質問から私が理解しているように、あなたが見るすべてをループしてそれらを配列に追加することができます。

[self.view insertSubview:view1 atIndex:2]
[self.view insertSubview:view1 aboveSubview:0]
[self.view insertSubview:view1 belowSubview:1]

その後、必要に応じて順序を入れ替えることができます..

于 2012-07-03T13:18:56.593 に答える