プログラムによって、UIButtonとUITextViewをサブビューとしてビューに追加しました。
notesDescriptionView = [[UIView alloc]initWithFrame:CGRectMake(0,0,320,460)];
notesDescriptionView.backgroundColor = [UIColor redColor];
[self.view addSubview:notesDescriptionView];
textView = [[UITextView alloc] initWithFrame:CGRectMake(0,0,320,420)];
[self.view addSubview:textView];
printf("\n description button \n");
button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button
addTarget:self action:@selector(cancel:)
forControlEvents:UIControlEventTouchDown];
[button setTitle:@"OK" forState:UIControlStateNormal];
button.frame = CGRectMake(80.0, 420.0, 160.0, 40.0);
[self.view addSubview:button];
ボタンがクリックされたときにすべてのサブビューを削除する必要があります。
私が試してみました:
[self.view removeFromSuperView]
しかし、それは機能していません。
[self.view removeFromSuperView]
上記のスニペットと同じクラスのメソッドから。
その場合[self.view removeFromSuperView]
は自身のスーパービューからself.viewを削除しますが、自分自身はサブビューを削除するビューのオブジェクトです。オブジェクトのすべてのサブビューを削除する場合は、代わりにこれを行う必要があります。
[notesDescriptionView removeFromSuperview];
[button.view removeFromSuperview];
[textView removeFromSuperview];
おそらく、これらのサブビューをNSArray
に保存し、その配列の各要素に対してremoveFromSuperview
を呼び出してその配列をループ処理する必要があります。
ビューに追加したすべてのサブビューを削除するには
次のコードを使用
for (UIView *view in [self.view subviews])
{
[view removeFromSuperview];
}
Objective-C APIには、UIViewからすべてのサブビューを削除する簡単な方法がないことにいつも驚いています。 (Flash APIにはありますが、結局はかなり必要になります。)
とにかく、これは私がそのために使用する小さなヘルパーメソッドです。
- (void)removeAllSubviewsFromUIView:(UIView *)parentView
{
for (id child in [parentView subviews])
{
if ([child isMemberOfClass:[UIView class]])
{
[child removeFromSuperview];
}
}
}
編集:ここでよりエレガントな解決策を見つけました: self.viewからすべてのサブビューを削除する最良の方法は何ですか?
これを次のように使用しています:
// Make sure the background and foreground views are empty:
[self.backgroundContentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
[self.foregroundContentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
私はそれが好きです。