3

UIButton があり、それを複数の UIView に追加したいと考えています。後で - スーパービューの 1 つから削除したいと思います。次の方法で試していますが、 removeFromSuperview メッセージをボタンに渡すと、両方のビューから削除されます。

[viewOverlay addSubview:myButton];
[viewButtons addSubview:myButton];

その後、viewOverlay からのみ削除したいと考えています。

[myButton removeFromSuperview];

これにより、両方のビューからボタンが削除されます。どうすればこれを達成できますか?

オベイド

4

2 に答える 2

2

removeFromSuperview メッセージをボタンに渡すと、両方のビューから削除されます

そのように見えるかもしれませんが、に追加したときにmyButtonから削除されました。のドキュメントから:viewOverlayviewButtons-addSubview:

ビューはスーパービューを 1 つだけ持つことができます。ビューに既にスーパービューがあり、そのビューがレシーバーでない場合、このメソッドはレシーバーを新しいスーパービューにする前に以前のスーパービューを削除します。

ここでの唯一の正しい解決策は、2 つのボタンを作成し、viewOverlayとのそれぞれに 1 つ追加することviewButtonsです。2 つのボタンは同じように見え、同じターゲットを持ち、同じアクションを実行できるため、ユーザーの観点からは「同じ」ボタンのように見えます。ただし、ビューは一度に 1 つのスーパービューしか持つことができません。つまり、文字通り、すべてsuperviewのビューには、それを含むビューを指すポインターがあり、そのポイントは一度に 1 つのオブジェクトしか指すことができないことは明らかです。

于 2012-07-23T16:09:11.627 に答える
1

1 つのビューを複数のビューに同時に追加することはできません。この場合、最初に追加されたビューが削除され、2 番目に追加されます。これを実現するには、インスタンスをもう 1 つ作成するか、既存のコピーを作成する必要があります。

ここから-

親ビューには任意の数のサブビューを含めることができますが、各サブビューには、そのサブビューを適切に配置する役割を担うスーパービューが 1 つしかありません。

于 2012-07-23T15:46:01.897 に答える