2011-10-28 11 views
0

私はiOSアプリケーションで描画をしています。私はUIViewのサブクラスで、いくつかの線やものを描画するクラスを持っています。ユーザーがボタンを押すと、クラスをインスタンス化し、アプリのUIViewControllerのメインビューでaddSubViewを実行します。ユーザーがそのボタンを押す回数が増えるほど、そのクラスのインスタンスがビューに追加されます。それは正常に動作しています。removeFromSuperviewの後にUIViewを削除/解除する適切な方法

ここでは、これらのビューの1つを削除する方法をユーザーに提供したいと考えています。これまで私は[self removeViewFromSuperview]をカスタムUIViewのtouchesBeganメソッドに入れました。ユーザーが図面を押すと、ビューから削除されます。しかし、実際には削除されていませんよね?ボタンが押されたときに実行されるメソッド内でビューがインスタンス化されたため、UIViewControllerから参照する方法がありません。作成して削除したUIViewでメモリを無駄にしていないことを確認する適切な方法は何ですか?

メインウィンドウのUIViewにトグルスイッチを配置して削除を切り替えると、touchesBegan内でそのトグルスイッチが削除= yesに設定されているかどうかを確認するにはどうすればよいですか? UIViewサブクラス内から確認できるAppDelegateに何らかのブール変数がありますか?どのように私はそれを参照しますか?

は、あなたの助け
ステートフル

+0

どのようにUIViewを作成していますか? –

答えて

4

あなたは、このようなビューを追加する場合:

UIView *viewBeingAdded = [[[UIView alloc] init] autorelease]; 
[view addSubview:viewBeingAdded]; 

することができますメモリリークせずにそれを削除:

[theViewAboutToBeRemoved removeFromSuperview]; 

UISwitchについて、あなたは何か他のもののためにそれを必要としない限り、どこでも、その値を維持する必要はありません。あなたは、その値を直接アクセスすることができます。

if ([theSwitch isOn]) { ... } 

あなたもIBOutletを必要としない、あなたはそのタグでスイッチにアクセスすることができます:あなたが独自のタグ番号を設定する必要があります。この場合、

UISwitch *theSwitch = (UISwitch *)[view viewWithTag:<# switch tag number #>]; 
if ([theSwitch isOn]) { ... } 

Interface Builderのスイッチ、またはそれを作成するときに使用します。

0

をありがとうあなたは[MAINVIEW addSubView:MYVIEW]を行うと、MAINVIEWはMYVIEWを保持します。 alloc/initを使用してmyViewを作成した場合は、それも保持します。メインビューに追加した後にmyViewを追加する必要がない場合は、追加してから[myView release]を実行してください。メインビューから削除すると、解放され、割り当てが解除されます。

0

alloc/initUIViewを作成した場合は、スーパービューに追加してからビューを解放すると、スーパービューに保持されます。 removeViewFromSuperviewで削除された場合、そのオブジェクトは割り当て解除されます。

0

私は典型的には、それを追加した後にビューを自動解放しますが、親は唯一の参照を残しています。

トグルをチェックする場合、IBOutletを追加して直接検査することができます。 (これは純粋なMVCではないかもしれないが、[のUIApplication sharedApplication]に入れるかどうかは知りません.delegateは必ずしもクリーナーです。)

関連する問題