web-dev-qa-db-ja.com

Iphoneサブビューを削除

UINavigationControllerがあります。右上には、ドロップダウンテーブルビューを取得する必要があるボタンがあります。 xibを使用して別のUIViewControllerクラスを作成し、現在のビューにsubViewとして追加しました。 1回目のクリックで表示され、2回目のクリックで消えます。これはすべてのクリックで発生するはずです(開いているビューと閉じているビュー)。私はこのコードを書きましたが、どこが間違っているのかわかりません。誰か助けてください

-(void)modalTableView
{
tableView1 = [[TableViewController alloc] initWithNibName:@"TableViewController" bundle:nil];

for (UIView *subView in self.view.subviews)
{

    if ([subView isKindOfClass:[TableViewController class]]) 
    {

         [subView removeFromSuperview];
    }

    else 
    {
        [self.view addSubview:tableView1.view];

    }
  }

}

ここで何が欠けていますか?

編集:TableViewControllerはUIViewControllerクラスの名前

35
Sharanya K M

手がかりはこちら

for (UIView *subView in self.view.subviews)

各サブビューはクラスUIViewおよびテストです

isKindOfClass:[TableViewController class]

クラスTableViewControllerをテストしています

これを行う方法として、動的に追加するビューに99などのタグを付けることをお勧めします。ループ内では、タグでそれらのビューを識別できます。

例えば。

for (UIView *subView in self.view.subviews)
{
    if (subView.tag == 99) 
    {
        [subView removeFromSuperview];
    }
}
66
Damo

スイフト版

単一のサブビューを削除するには:

subView.removeFromSuperview()

すべてのサブビューを削除するには:

for subView in self.subviews as [UIView] {
    subView.removeFromSuperview()
}

ソース: 親ビュー/スーパービューからすべてのビューを削除する最良の方法は何ですか?

12
Suragch

これを試して、

if ([subView isKindOfClass:[UITableView class]]) 
{

     [subView removeFromSuperview];
}
4
chinthakad

ここにいくつかの方法があります-tableView1が保持されている@propertyであると仮定すると(そうでない場合は多分 this SO )。

-(void)modalTableView
{
    if (tableView1 != nil)
    {
        tableView1 = [[TableViewController alloc] initWithNibName:@"TableViewController" bundle:nil];
    }

    if (tableView1.view.superview == nil)
    {
        [self.view addSubview:tableView1.view];
    } else
    {
        [tableView1.view removeFormSuperview];
    }
}
3
Damo