web-dev-qa-db-fra.com

Iphone remove sub view

J'ai un UINavigationController. En haut à droite, j'ai un bouton sur lequel je dois obtenir un tableau déroulant. J'ai créé une autre classe UIViewController, avec xib et l'ai ajoutée en tant que sous-vue à la vue actuelle. Il devrait apparaître au 1er clic et disparaître au 2ème clic. Cela devrait se produire pour tous les clics (vue ouverte et vue rapprochée). J'ai écrit ce code mais je ne sais pas où je vais mal. quelqu'un s'il vous plaît aider

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

    }
  }

}

Qu'est-ce que j'oublie ici?

EDIT: TableViewController est le nom de ma classe UIViewController

35
Sharanya K M

L'indice est ici

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

chaque sous-vue est de classe UIView et votre test

isKindOfClass:[TableViewController class]

teste la classe TableViewController

Je suggérerais qu'une façon de faire serait de baliser les vues que vous ajoutez dynamiquement, disons 99 - puis dans votre boucle, vous pouvez identifier ces vues par leur balise.

par exemple.

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

Version Swift

Pour supprimer une seule sous-vue:

subView.removeFromSuperview()

Pour supprimer toutes les sous-vues:

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

Source: Quelle est la meilleure façon de supprimer toutes les vues de la vue parent/super vue?

12
Suragch

Essaye ça,

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

     [subView removeFromSuperview];
}
4
chinthakad

Voici quelque chose qui devrait marcher - en supposant que tableView1 est une @property conservée (sinon, peut-être ceci SO la réponse sur les techniques de chargement paresseux est pour vous) ).

-(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