20

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];

}
4

3 に答える 3

51

迅速で汚い:ビューにタグを付けて、後で識別できるようにします。

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];

そうは言っても、他のViewControllerのビューで遊ぶことについてのコメント投稿者からの警告に注意してください。必要に応じて、 ViewControllerの封じ込めについて読んでください。

于 2012-05-03T16:30:58.543 に答える
7

新しい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];

サイドノート

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

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

于 2012-05-03T16:27:46.270 に答える
2

ビューを識別する一意のタグをビューに設定するだけです。そして、あなたがそれを削除したいとき。メソッドを使用し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];
}
于 2012-05-03T16:32:47.217 に答える