web-dev-qa-db-ja.com

特定のサブビューを削除するには?

サブビュー(ViewController)をViewControllerに追加しました。

Location *location = [[Location alloc] initWithNibName:@"Location" bundle:[NSBundle mainBundle]];
[self.subView addSubview:location.view];

このサブビューを後で削除するにはどうすればよいですか?

私はすべてのサブビューを削除することは知っています:

for (UIView *subview in [self.view subviews]) {

  [subview removeFromSuperview];

}
20
iWizard

Quick and dirty:ビューにタグを付けて、後で識別できるようにします。

Location *location = [[Location alloc] initWithNibName:@"Location" bundle:[NSBundle mainBundle]];
UIView *viewToAdd = location.view;
viewToAdd.tag = 17; //you can use any number you like
[self.view addSubview:viewToAdd];

次に、削除するには:

UIView *viewToRemove = [self.view viewWithTag:17];
[viewToRemove removeFromSuperview];

よりクリーンで、より速く、読みやすく、保守が容易代替手段は、ビューにアクセスするための変数またはプロパティを作成することです。

インターフェース:

@property (nonatomic, weak) UIView *locationView;

実装では:

Location *location = [[Location alloc] initWithNibName:@"Location" bundle:[NSBundle mainBundle]];
UIView *viewToAdd = location.view;
self.locationView = viewToAdd;
[self.view addSubview:viewToAdd];

次に、削除するには:

[self.locationView removeFromSuperview];

とはいえ、他のViewControllersのViewでの再生についてのコメント投稿者からの警告に注意してください。必要な場合は、ViewController containsmentを参照してください。

50
fzwo

新しいviewControllerまたはビューのみへの参照を提供するivarを作成します。ここでviewControllerに行きます

プロパティを追加して合成する

// .h
@property (nonatomic, strong) Location *location;

// .m
@synthesize location = _location;

次に、場所を作成するときにivarを設定します

Location *location = [[Location alloc] initWithNibName:@"Location" bundle:[NSBundle mainBundle]];
self.location = location;

[self.subView addSubview:location.view];

後で削除する

[self.location.view removeFromSuperview];

サイドノート

一般に、このようにビューコントローラのビューを別のビューに追加するのは骨の折れる道です。これについての簡単な説明については、 IViewControllersの乱用 を参照してください。

あなたのLocationの命名はおそらく素晴らしいものではありません。LocationViewControllerのようなものと呼ぶ方が適切かもしれません。このように一貫した名前を付けると、他のユーザー(または将来あなた)が、ヘッダーを開かなくても、これがviewControllerであることを簡単に読み取って把握できます。

7
Paul.s

それを識別する一意のタグをビューに設定するだけです。そして、それを削除したいとき。 viewWithTag:(NSInteger)tagメソッドを使用して元に戻し、このメソッドのみを削除します。

Location *location = [[Location alloc] initWithNibName:@"Location" bundle:[NSBundle mainBundle]];
location.tag = 8001; // 8001 is an exemple
[self.subView addSubview:location.view];

その後

UIView * v = [self.subView viewWithTag:8001];
if (nil != v) {
    [v removeFromSuperview];
}
2
Vaseltior