Iphone删除子视图

问题描述 投票:34回答:4

我有一个UINavigationController。在右上方我有一个按钮点击,我必须得到一个下拉表视图。我创建了另一个UIViewController类,使用xib并将其作为子视图添加到当前视图中。它应该出现在第一次点击,并在第二次点击时消失。所有点击都会发生这种情况(打开视图和关闭视图)。我写了这段代码,但不知道我哪里出错了。有人请帮忙

-(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类的名称

ios uitableview drop-down-menu addsubview
4个回答
65
投票

线索就在这里

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

每个subView都是UIView类和你的测试

isKindOfClass:[TableViewController class]

正在测试类TableViewController

我建议这样做的方法是标记你动态添加的视图,例如99 - 然后在循环中你可以通过标记识别这些视图。

例如。

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

11
投票

Swift version

要删除单个子视图:

subView.removeFromSuperview()

要删除所有子视图:

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

资料来源:What is the best way to remove all views from parent view / super view?


4
投票

试试这个,

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

     [subView removeFromSuperview];
}

3
投票

这是应该采取某种方式工作的东西 - 假设tableView1是一个保留的@property(如果不是那么可能this关于延迟加载技术的答案适合你)。

-(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];
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.